FR 3057081 A1 20180406 FR 1659600 A 20161005 1 PROCESSEUR COMPRENANT UNE PLURALITE DE COEURS DE CALCUL. La présente invention concerne un processeur comprenant une pluralité de coeurs de calcul. CONTEXTE DE L'INVENTION Depuis leur apparition dans la deuxième moitié du vingtième siècle, les systèmes informatiques n'ont cessé de se complexifier pour exécuter des tâches de plus en plus consommatrices en termes de calculs. Par le passé, une approche classique pour améliorer les capacités des processeurs des systèmes informatiques a été d'augmenter la fréquence de fonctionnement de ces processeurs et d'accroître leur miniaturisation. Mais cette approche a montré ses limites car elle induisait de fortes augmentations de consommation énergétique et des besoins en refroidissement des processeurs accrus. Une nouvelle approche s'est alors popularisée et consistait à créer des processeurs comprenant plusieurs coeurs de calcul (que nous appelons simplement coeurs par la suite). On distingue deux types de processeurs comportant plusieurs coeurs : les processeurs dit nombreux coeurs (plus connus sous l'appellation anglo-saxonne « manyCore ») et les processeurs multiple coeurs («multicore» en terminologie anglo-saxonne). Les processeurs manycore diffèrent des processeurs multicore dans le nombre de coeurs dans un même processeur. Ainsi un ordre de grandeur du nombre de coeurs dans un processeur multicore est une dizaine de coeurs alors qu'un processeur manycore peut contenir une centaine voire un millier de coeurs. Les processeurs manycore et multicore ont ainsi des architectures différentes, adaptées au nombre de coeurs. En général, les processeurs manycore sont organisés en groupes de calcul (cluster en terminologie anglo-saxonne) regroupant plusieurs coeurs partageant des ressources locales au groupe de calcul. Les groupes de calcul d'un processeur manycore peuvent communiquer entre eux et avec des ressources extérieures au groupe de calcul en utilisant un réseau interne au processeur appelé réseau sur puce (« Network on Chip (NoC) » en terminologie anglo-saxonne). Un réseau sur puce peut par exemple être un réseau maillé. Certaines topologies de processeurs manycore comportent deux types de groupes de calcul : les groupes de calcul applicatifs dédiés à des exécutions 3057081 2 d'applications et les groupes de calcul entrée/sortie dédiés à des communications avec des ressources externes au processeur. Il est courant dans les processeurs manycore que chaque groupe de calcul possède une mémoire partagée entre les coeurs du groupe de calcul. Ces mémoires 5 partagées ont généralement des tailles réduites comparées aux tailles de codes informatiques et aux données que doivent manipuler les processeurs manycore. Une mise en oeuvre d'un programme informatique, mettant en oeuvre une application, nécessite alors une utilisation d'une mémoire externe au processeur. Cette mémoire externe devient alors une mémoire partagée entre différentes applications mises en 10 oeuvre par le processeur. Des interférences peuvent alors apparaître entre ces différentes applications lors d'écritures ou de lectures dans la mémoire externe. Il est souhaitable de pallier cet inconvénient de l'état de la technique. Il est notamment souhaitable de proposer un mécanisme qui permet à des applications fonctionnant sur un processeur manycore d'accéder à la mémoire distante tout en 15 garantissant une non-interférence entre les différentes applications. EXPOSE DE L'INVENTION Selon un aspect de la présente invention, la présente invention concerne un 20 processeur comprenant une pluralité de groupes de calcul, chaque groupe de calcul comprenant une pluralité de coeurs de calcul, le processeur étant apte à mettre en oeuvre simultanément une pluralité d'applications, chaque application étant mise en oeuvre par un groupe de calcul et pouvant nécessiter un accès en lecture ou en écriture à une mémoire externe connectée au processeur. Au moins un groupe de calcul 25 comprend au moins un coeur, dit coeur dédié, dédié à une gestion de la mémoire externe, ladite gestion permettant d'organiser temporellement et spatialement les accès en lecture et en écriture à la mémoire externe de chaque application nécessitant une lecture ou une écriture dans ladite mémoire externe mise en oeuvre simultanément par le processeur. L'organisation temporelle et spatiale des accès à la mémoire externe contrôlée par au moins un coeur du processeur permet d'éviter des interférences entre des lectures et écritures simultanées dans la mémoire externe et ainsi de fiabiliser des applications mises en oeuvre par le dit processeur telles que des applications critiques. 3057081 3 Selon un mode de réalisation, le processeur comprend au moins un groupe de calcul entrée/sortie dédié à des communications avec des ressources externes au processeur, au moins un des coeurs d'au moins un groupe entrée/sortie fait office de coeur dédié gérant chaque accès en lecture à la mémoire externe. 5 Selon un mode de réalisation, le processeur comprend au moins un groupe de calcul applicatif dédié à des exécutions d'applications, au moins un des coeurs d'au moins un groupe applicatif fait office de coeur dédié gérant chaque accès en écriture à la mémoire externe. Selon un mode de réalisation, lorsque le processeur comprend une pluralité de 10 coeurs dédiés, lesdits coeurs dédiés sont synchronisés sur une horloge commune. Selon un mode de réalisation, chaque coeur dédié est apte à vérifier pour chaque application qui le concerne que les écritures et lectures correspondant à une application se font bien dans une unité logique de stockage allouée pour ladite application dans la mémoire externe. 15 Selon un mode de réalisation, chaque coeur dédié garantit une ségrégation temporelle des lectures et des écritures dans la mémoire externe en regroupant d'une part des écritures entre elles et en regroupant d'autre part des lectures entre elles de sorte à éviter qu'au moins une écriture soit intercalée entre deux lectures ou qu'au moins une lecture soit intercalée entre deux écritures. 20 Selon un mode de réalisation, le processeur est apte à mettre en oeuvre une pluralité d'interfaces de programmation prédéfinies, chaque interface de programmation de la pluralité permettant à une application nécessitant une lecture ou écriture en mémoire externe de faire appel à un coeur dédié pour qu'il réalise ladite lecture ou écriture. 25 Selon un mode de réalisation, une interface de programmation de la pluralité utilise une table de configuration prédéfinie dans laquelle le temps est divisé en périodes, chaque période de temps étant associée à des lectures ou écritures en mémoire externe à réaliser pendant ladite période par un processeur dédié pour le compte d'une application prédéterminée. 30 Selon un mode de réalisation, une interface de programmation de la pluralité permet à une application de demander des lectures ou écritures en mémoire externe de façon asynchrone et utilise une table de configuration dans laquelle sont définis des types de lecture ou d'écriture en mémoire externe ayant des caractéristiques différentes, chaque type de lecture ou écriture en mémoire externe étant associé à un 3057081 4 identifiant, une application pouvant appeler un desdits identifiants pour qu'un coeur dédié mette en oeuvre un type de lecture ou d'écriture en mémoire externe correspondant audit identifiant. Selon un mode de réalisation, une interface de programmation de la pluralité 5 permet à une application de demander des lectures ou écritures en mémoire externe de façon asynchrone en permettant à ladite application d'indiquer à un coeur dédié des caractéristiques d'une lecture ou écriture à mettre en oeuvre par ledit coeur dédié calculées dynamiquement par ladite application. Selon un deuxième aspect de l'invention, l'invention concerne un aéronef 10 comprenant une unité de calcul comprenant au moins un processeur selon le premier aspect. BREVE DESCRIPTION DES DESSINS 15 Les caractéristiques de la présente invention mentionnées ci-dessus, ainsi que d'autres, apparaîtront plus clairement à la lecture de la description suivante d'un exemple de réalisation, ladite description étant faite en relation avec les dessins joints, parmi lesquels : - la Fig. 1 illustre schématiquement un exemple de véhicule dans lequel est 20 mise en oeuvre l'invention, - la Fig. 2 illustre schématiquement un exemple de processeur manycore ; et, - la Fig. 3 illustre schématiquement un exemple de groupe de calcul. DESCRIPTION DETAILLEE DE DIVERS MODES DE REALISATION 25 La description détaillée ci-après s'attache à décrire un mode de réalisation de la présente invention dans un contexte d'un processeur manycore. Les principes de la présente invention s'appliquent cependant dans un contexte plus large et pourraient s'appliquer à des processeurs comportant plusieurs coeurs tels que les processeurs 30 multicore. Par ailleurs, l'invention est mise en oeuvre dans un véhicule de type aéronef. Elle pourrait toutefois être mise en oeuvre dans tout autre véhicule tel qu'un véhicule automobile, un drone, etc. L'invention pourrait d'ailleurs être mise en oeuvre dans un autre contexte qu'un véhicule, sur tous dispositifs ou appareils comprenant un processeur manycore ou multicore. 3057081 5 La Fig. 1 illustre schématiquement un exemple de véhicule dans lequel est mise en oeuvre l'invention. Ledit véhicule est un aéronef 2. Cet aéronef 2 comprend une unité de calcul 1 chargée notamment de gérer les commandes de pilotage. Cette unité de calcul 1 comprend un processeur manycore 10 décrit en détail en relation avec la 5 Fig. 2. La Fig. 2 illustre schématiquement un exemple de processeur manycore 10. Le processeur manycore 10 comprend une pluralité de groupes de calcul applicatifs 200 à 215 (ici « 16 » groupes de calcul applicatifs) et une pluralité de groupes de calcul entrée/sortie 100 à 115 (ici « 16 » groupes de calcul entrée/sortie). 10 Au moins un des groupes de calcul entrée/sortie est adapté pour communiquer avec une mémoire externe 300 par exemple de type DDR SDRAM (« Double data Rate Synchronous Dynamic Random Access Memory » en terminologie anglo-saxonne : mémoire à accès aléatoires dynamiques synchronisés à débit doublé). Les communications entre les groupes de calculs (applicatifs et/ou entrée/sortie) utilisent 15 un réseau sur puce NoC maillé. Dans ce réseau sur puce NoC maillé, chaque groupe de calcul applicatif est relié à « 4 » autres groupes de calcul (applicatifs et/ou entrée/sortie) et chaque groupe de calcul entrée/sortie est relié à un groupe de calcul applicatif. Chaque groupe de calcul entrée/sortie comprend une pluralité de coeurs, dits coeurs entrée/sortie. 20 La Fig. 3 illustre schématiquement un exemple de groupe de calcul applicatif 200. Le groupe de calcul applicatif 200 comprend « 16 » coeurs numérotés de 2000 à 2015, dits coeurs applicatifs, une mémoire interne partagée 2016, et un coeur de gestion de ressources 2017. Le coeur de gestion de ressources 2017 possède des privilèges qui 25 permettent de configurer différentes ressources du groupe de calcul applicatif 200 et notamment de configurer le réseau sur puce NoC. Le coeur de gestion de ressources assure également un rôle de vérification et d'émission sur le réseau sur puce NoC de requêtes de lectures/écritures qui viennent des coeurs applicatifs du groupe de calcul applicatif 200. Tous les groupes de calcul du processeur manycore 10 sont supposés 30 identiques au groupe de calcul applicatif 200. Dans le processeur 10, au moins un coeur entrée/sortie exécute un processus maître engendrant des processus esclaves. Chaque processus esclave est exécuté par un groupe de calcul applicatif. Lorsqu'un groupe de calcul applicatif met en oeuvre une application, au moins un coeur applicatif de ce groupe prend en charge une 3057081 6 exécution de ladite application. Lorsque l'application est décomposée en plusieurs tâches parallèles (« multithread » en terminologie anglo-saxonne), plusieurs coeurs applicatifs du groupe de calcul applicatif peuvent être impliqués parallèlement dans l'exécution de ladite application. Les coeurs applicatifs se partagent la mémoire interne 5 partagée 2016 lors de l'exécution des tâches. Le processeur manycore 10 comprend un groupe de calcul applicatif dédié à une gestion de la mémoire externe 300. Dans ce groupe de calcul applicatif, au moins un coeur est dédié à la gestion de la mémoire externe 300. Chaque coeur applicatif doit impérativement passer par un coeur dédié à la gestion de la mémoire externe 300 pour 10 accéder à ladite mémoire externe 300. Chaque accès à la mémoire externe 300 est ainsi contrôlé par ledit coeur dédié, qui peut choisir différentes politiques d'accès à ladite mémoire externe 300. Par exemple, chaque coeur dédié peut garantir : - une organisation (ou ségrégation) temporelle des accès à la mémoire externe 300. Intercaler une écriture en mémoire entre deux lectures en 15 mémoire (réciproquement intercaler une lecture en mémoire entre deux écritures en mémoire) entraîne des temps d'attentes (latences) qui induisent des interférences entre les applications. En effet, les temps d'accès en mémoire d'une application peuvent devenir dépendants d'une autre application. La ségrégation temporelle des accès à la mémoire 20 consiste à regrouper d'une part les écritures entre elles et à regrouper d'autre part les lectures entre elles, de sorte à éviter autant que possible qu'au moins une écriture soit intercalée entre deux lectures et qu'au moins une lecture soit intercalée entre deux écritures ; - une organisation (ou ségrégation) spatiale des accès à la mémoire 25 externe 300 entre les diverses applications mises en oeuvre par le processeur manycore 10. Ainsi deux applications devant écrire simultanément dans la mémoire externe 300 utiliseront des zones mémoires suffisamment éloignées spatialement pour éviter toute interférence. Il est courant de diviser une mémoire en unités logiques de 30 stockage (« memory bank » en terminologie anglo-saxonne). Des accès à des unités logiques de stockage différentes se font par définition sans interférence; - garantir des accès prioritaires de certains coeurs à la mémoire externe 300 ; 3057081 7 - garantir des accès à latences garanties ou aléatoires à ladite mémoire externe 300. Garantir des accès prioritaires et/ou à latences garanties à la mémoire externe 300, prévoir une ségrégation temporelle et spatiale des accès à la mémoire externe 300 5 permet d'accroître la fiabilité de certaines applications telles que les applications critiques dont un disfonctionnement pourrait avoir des conséquences dramatiques. Dans un mode de réalisation, au moins un des coeurs entrée/sortie d'un des groupes de calcul entrée/sortie 100-115 du processeur manycore 10 fait office de coeur dédié gérant chaque accès en lecture à la mémoire externe 300. Par ailleurs, au moins 10 un des coeurs de gestion de ressources d'un des groupes de calcul applicatifs 200-215 fait office de coeur dédié gérant chaque accès en écriture à la mémoire externe 300. Chaque coeur dédié impliqué dans les accès en écriture ou en lecture à la mémoire externe 300 contribue à une mise en oeuvre d'un processus de gestion de mémoire externe. Le processus de gestion de mémoire externe empêche que les accès en 15 lecture/écriture en mémoire externe 300 interfèrent entre eux. Dans un mode de réalisation, les coeurs dédiés contribuant à la mise en oeuvre du processus de gestion de mémoire externe sont synchronisés sur une horloge commune, ce qui permet aux coeurs dédiés d'implémenter des fenêtres de lecture et des fenêtres d'écriture. Durant une fenêtre de lecture, un coeur dédié ne fera que des lectures en 20 mémoire externe 300. Durant une fenêtre d'écriture, un coeur dédié ne fera que des écritures en mémoire. De cette manière on assure une ségrégation temporelle des accès à la mémoire externe 300. Dans un mode de réalisation, les applications mises en oeuvre par le processeur manycore 10 ne partagent jamais une même unité logique de stockage de la mémoire 25 externe 300. Chaque coeur dédié impliqué dans les accès en écriture ou en lecture à la mémoire externe 300 vérifie pour chaque application qui le concerne, que les écritures et lectures correspondant à une application se font bien dans une unité logique de stockage allouée pour ladite application dans la mémoire externe 300. Comme dit plus haut, chaque application nécessitant une lecture/écriture en 30 mémoire externe 300 doit passer par un coeur dédié car c'est lui qui effectue les vérifications évitant les interférences. Pour ce faire, chaque application mise en oeuvre par le processeur 10 doit obligatoirement utiliser des API (Interface de programmation, « Application Programming Interface » en terminologie anglo-saxonne) prédéfinies pour pouvoir accéder en lecture/écriture à la mémoire externe 3057081 8 300. De cette manière, la sécurité des accès à la mémoire externe 300 est renforcée. Ces API permettent de faire appel à un coeur dédié pour effectuer réellement les lectures/écritures en mémoire externe 300 nécessaires au fonctionnement d'une application. 5 Une première API appelée API de transfert périodique statiquement défini permet de gérer automatiquement, à la place d'une application, des lectures/écritures en mémoire externe 300 pour ladite application. Chaque lecture/écriture est définie de manière statique dans une table de configuration. Dans cette table de configuration, le temps est divisé en périodes. Cette table de configuration comprend, pour chaque 10 période de temps, des informations représentatives de lectures/écritures à réaliser durant cette période. Chaque information représentative de lectures/écritures comprend une adresse de source de données à lire, une adresse de destination des données lues, un identifiant de ladite application et une taille des données à lire. Dans le cas d'une lecture, l'adresse de source se trouve dans la mémoire externe 300. Dans 15 le cas d'une écriture, l'adresse de source se trouve dans la mémoire interne partagée du groupe de calcul applicatif concerné par la mise en oeuvre de ladite application. Dans le cas d'une lecture, l'adresse de destination se trouve dans la mémoire interne partagée du groupe de calcul applicatif concerné par la mise en oeuvre de ladite application. Dans le cas d'une écriture, l'adresse de destination se trouve dans la 20 mémoire externe 300. Chaque coeur dédié lit alors la table de configuration et met en oeuvre les lectures/écritures qui le concernent. Chaque lecture et écriture est réalisée en assurant les propriétés de ségrégation spatiales et temporelles présentées précédemment. L'API de transfert périodique statiquement défini est particulièrement adaptée pour les applications temps réel strictes telles que des applications de gestion 25 de commandes de vol dans un aéronef. Dans un mode de réalisation, l'API de transfert périodique statiquement défini peut être bloquante ou non bloquante, c'est-à-dire qu'un appel à cette API pour une lecture/écriture peut empêcher (i.e. API bloquante) toute autre lecture/écriture impliquant la mémoire externe 300. 30 Une deuxième API, dite API de transfert apériodique statiquement défini permet des lectures/écritures apériodiques. Cette API permet à une application de demander des lectures/écritures de façon asynchrone. Cette deuxième API définit une pluralité de types de lecture/écriture, chaque type de lecture/écriture ayant des caractéristiques différentes. Une table de configuration définit chaque type de lecture/écriture de la 3057081 9 pluralité. Dans la table de configuration, chaque type de lecture/écriture de la pluralité est associé à un identifiant et à des informations représentatives de caractéristiques dudit type de lecture/écriture. Ces informations représentatives de caractéristiques du type de lecture/écriture comprennent une adresse de source des données à lire, une 5 adresse de destination des données lues, et une taille des données à lire. Lorsqu'une application veut mettre en oeuvre une lecture/écriture dans le cadre de cette API, il fait appel à l'identifiant du type de lecture/écriture souhaité. Un coeur dédié réalise ensuite chaque lecture/écriture correspondant au type appelé au moment de l'appel. Chaque lecture et écriture est réalisée en assurant les propriétés de ségrégation spatiales et 10 temporelles présentées précédemment. Dans un mode de réalisation, l'API de transfert apériodique statiquement défini peut être bloquante ou non bloquante, c'est-à-dire qu'un appel à cette API pour une lecture/écriture peut empêcher (i.e. API bloquante) toute autre lecture/écriture impliquant la mémoire externe 300. 15 La deuxième API est particulièrement adaptée aux applications qui réagissent à des évènements externes mais qui ont des traitements systématiques et identiques sur ces évènements. Une troisième API, dite API de transfert apériodique dynamiquement défini, permet aussi des lectures/écritures apériodiques. Cette troisième API permet à une 20 application de demander des lectures/écritures de façon asynchrone. Contrairement à la deuxième API, dans cette troisième API, aucun type de lecture/écriture n'est prédéfini. Chaque caractéristique d'une lecture/écriture (i.e. adresse de source des données à lire, adresse de destination des données lues, et taille des données à lire) est calculée dynamiquement par l'application faisant appel à la troisième API. Chaque 25 caractéristique est ensuite passée au coeur dédié devant mettre en oeuvre ladite lecture/écriture. Chaque lecture et écriture est réalisée en assurant les propriétés de ségrégation spatiales et temporelles présentées précédemment. La troisième API est particulièrement adaptée pour les applications dynamiques dont certains éléments sont calculés en cours d'exécution de l'application. 30 Dans un mode de réalisation, l'API de transfert apériodique dynamiquement défini peut être bloquante ou non bloquante, c'est-à-dire qu'un appel à cette API pour une lecture/écriture peut empêcher (i.e. API bloquante) toute autre lecture/écriture impliquant la mémoire externe 300. REVENDICATIONS1) Processeur (10) comprenant une pluralité de groupes de calcul, chaque groupe de calcul comprenant une pluralité de coeurs de calcul, le processeur (10) étant apte à mettre en oeuvre simultanément une pluralité d'applications, chaque application étant mise en oeuvre par un groupe de calcul et pouvant nécessiter un accès en lecture ou en écriture à une mémoire externe (300) connectée au processeur (10), caractérisé en ce que : au moins un groupe de calcul comprend au moins un coeur, dit coeur dédié, dédié à une gestion de la mémoire externe (300), ladite gestion permettant d'organiser temporellement et spatialement les accès en lecture et en écriture à la mémoire externe (300) de chaque application nécessitant une lecture ou une écriture dans ladite mémoire externe (300) mise en oeuvre par le processeur (10). 2) Processeur (10) selon la revendication 1, caractérisé en ce que le processeur (10) comprend au moins un groupe de calcul entrée/sortie dédié à des communications avec des ressources externes au processeur, au moins un des coeurs d'au moins un groupe entrée/sortie fait office de coeur dédié gérant chaque accès en lecture à la mémoire externe (300). 3) Processeur (10) selon la revendication 1 ou 2, caractérisé en ce que le processeur (10) comprend au moins un groupe de calcul applicatif dédié à des exécutions d'applications, au moins un des coeurs d'au moins un groupe applicatif fait office de coeurs dédié gérant chaque accès en écriture à la mémoire externe (300). 4) Processeur (10) selon la revendication 1, 2 ou 3, caractérisé en ce que lorsque le processeur (10) comprend une pluralité de coeurs dédiés, lesdits coeurs dédiés sont synchronisés sur une horloge commune. 5) Processeur selon l'une quelconque des revendications précédentes, caractérisé en ce que chaque coeur dédié est apte à vérifier pour chaque application qui le concerne que les écritures et lectures correspondant à une application se font bien dans une unité logique de stockage allouée pour ladite application dans la mémoire externe (300). 3057081 11 6) Processeur selon l'une quelconque des revendications précédentes, caractérisé en ce que chaque coeur dédié garantit une ségrégation temporelle des lectures et des écritures dans la mémoire externe (300) en regroupant d'une part des écritures entre 5 elles et en regroupant d'autre part des lectures entre elles de sorte à éviter qu'au moins une écriture soit intercalée entre deux lectures ou qu'au moins une lecture soit intercalée entre deux écritures. 7) Processeur selon l'une quelconque des revendications précédentes, caractérisé 10 en ce que le processeur est apte à mettre en oeuvre une pluralité d'interfaces de programmation prédéfinies, chaque interface de programmation de la pluralité permettant à une application nécessitant une lecture ou écriture en mémoire externe (300) de faire appel à un coeur dédié pour qu'il réalise ladite lecture ou écriture. 15 8) Processeur selon la revendication 7, caractérisé en ce que une interface de programmation de la pluralité utilise une table de configuration prédéfinie dans laquelle le temps est divisé en périodes, chaque période de temps étant associée à des lectures ou écritures en mémoire externe (300) à réaliser pendant ladite période par un processeur dédié pour le compte d'une application prédéterminée. 20 9) Processeur selon la revendication 7, caractérisé en ce que une interface de programmation de la pluralité permet à une application de demander des lectures ou écritures en mémoire externe (300) de façon asynchrone et utilise une table de configuration dans laquelle sont définis des types de lecture ou d'écriture en mémoire 25 externe (300) ayant des caractéristiques différentes, chaque type de lecture ou écriture en mémoire externe (300) étant associé à un identifiant, une application pouvant appeler un desdits identifiants pour qu'un coeur dédié mette en oeuvre un type de lecture ou d'écriture en mémoire externe (300) correspondant audit identifiant. 30 10) Processeur selon la revendication 7, caractérisé en ce que une interface de programmation de la pluralité permet à une application de demander des lectures ou écritures en mémoire externe (300) de façon asynchrone en permettant à ladite application d'indiquer à un coeur dédié des caractéristiques d'une lecture ou écriture à mettre en oeuvre par ledit coeur dédié calculées dynamiquement par ladite application. 3057081 12 11) Aéronef (2) comprenant une unité de calcul (1) comprenant au moins un processeur selon l'une des revendications 1 à 10.