• Aucun résultat trouvé

4.2 Architecture hétérogène CPU-FPGA

4.2.1 nœud de calcul multi-cœur

Les architectures multi-cœur actuelles offrent des performances compatibles avec celles requises par le domaine d’application. De plus, les environnements actuels fournissent les éléments nécessaires pour le développement d’applications tirant profit des capacités et des propriétés de ces architectures.

Depuis le lancement des premiers ordinateurs sur le marché, les demandes croissantes des capacités de calcul par les applications ont poussé les constructeurs à proposer des

architectures répondant aux contraintes de performances requises. L’augmentation des fré- quences de calcul a entrainé des problèmes de surchauffe.

En effet, l’augmentation des capacités de calcul est tributaire de la consommation de puissance, et le fait d’augmenter cette consommation nécessite alors de gérer les niveaux de dissipation thermique. Pour remédier à ces problèmes, des solutions telles que le refroidisse- ment par eau ou bien la ventilation voient le jour. Une autre approche est de multiplier les cœurs de calcul plutôt que leur fréquence. De plus, le multitraitement symétrique (SMP) a longtemps été utilisé pour améliorer les performances en répartissant les charges sur plusieurs processeurs. Le SMP est particulièrement efficace dans les environnements multi- tâches où plusieurs tâches doivent être gérées simultanément. L’appellation multi-cœur est alors employée pour décrire un processeur composé de plusieurs unités de calcul placées sur la même puce. C’est en 2001 qu’est commercialisé le premier processeur multi-cœur, il s’agit du POWER4 [45] par IBM.

A l’heure actuelle, plusieurs architectures multi-cœur sont disponibles. Intel et AMD se partagent un marché grand public. La demande croissante de l’industrie amène les grands constructeurs à multiplier les cœurs. Dans ce cadre, le projet Tera-Scale [50] [66] dirigé par Intel propose plus de 80 cœurs de calcul sur une même puce. De plus d’une architecture, Intel propose également un modèle de programmation Ct [28] basé sur une extension du langage C++ permettant d’exploiter les propriétés parallèles de l’architecture proposée en assurant la parallélisation automatique de code source exploitant les caractéristiques de l’architecture SMP proposée.

Les architectures processeur actuelles contiennent des mémoires caches, cette propriété est également vraie pour les architectures multi-cœur. Toutefois, il n’y a deux possibilités dans l’accès à ces mémoires caches. En effet, une première possibilité est le partage d’une mémoire cache visible depuis tous les cœurs et une seconde verra une mémoire cache dédiée à chaque cœur.

Une architecture basée sur une spécialisation des caches sur chacun des cœurs permettra qu’il n’y ait aucune interférence dans les accès à ces mémoires. De plus, le temps d’accès aux mémoires est généralement plus faible que dans le cas d’un cache partagé.

Une architecture basée sur l’utilisation de caches partagés présente également plusieurs avantages. Tous les programmes devront alors se partager l’accès à ces mémoires et ce, dynamiquement. Il pourront ainsi se répartir l’occupation de la mémoire de manière assez souple avec des mécanismes de cohérence. Dès lors, il devient possible de partager les données entre plusieurs threads ne nécessitant pas alors une réplication des données comme

cela peut être nécessaire dans le cas de caches dédiés. Néanmoins, ce type d’architecture présente quelques inconvénients. En effet, la mémoire cache devra partager ses accès entre plusieurs cœurs, ce qui introduira des latences supplémentaires. Les accès simultanés devant être possibles afin d’éviter l’introduction de mécanismes d’attentes entre les cœurs de calcul ayant besoin d’accéder une même zone. De ce fait, ces mémoires caches sont des mémoires multi-ports.

Dans la réalité, compte tenu des contraintes décrites ci-dessus, tous les caches du pro- cesseur multi-cœur ne sont pas partagés. En effet, ceux qui ont besoin d’une faible latence (cache L1) sont des caches dédiés, tandis que les autres sont partagés (L2, L3).

Néanmoins, ce type d’architecture peut présenter un désavantage. En effet, les applica- tions doivent être conçues pour exploiter les caractéristiques de ces processeurs, la fréquence de chacun des cœurs de calcul étant inférieure à la fréquence des anciens processeurs mono- cœur, un programme non optimisé verra par conséquent ses performances diminuées. Dans le cadre de notre projet, nous allons optimiser les tâches composant notre application dans le but de tirer parti des propriétés de ces unités de traitement.

Comme cela est décrit sur la figure4.1, notre stratégie est de "caractériser" l’utilisation des cœurs selon trois niveaux hiérarchiques.

– Un premier niveau sera consacré au système d’exploitation (cœurs bleus sur la figure

4.1). Cette spécialisation aura pour but de rendre les autres cœurs non disponibles vis à vis des interruptions systèmes qui pourraient perturber le bon fonctionnement de la session de test. Ce niveau est hors contrainte temps-réel.

– Un second niveau (cœurs roses sur la figure 4.1) est attribué aux fonctions et aux mo- dèles de test et de simulation, c’est à dire soumis aux contraintes temps-réel requises par le domaine d’application. Sur ces cœurs de calcul, seront exécutées les fonctions propres à la session de test et de simulation en cours.

– Un troisième niveau (cœur violet sur la figure4.1) est attribué aux fonctions de com- munication avec les accélérateurs matériels hébergés au sein du composant FPGA. Cette hiérarchisation des cœurs processeurs est également valable pour la mémoire RAM disponible. En effet, cette dernière peut être répartie selon son utilisation. Par exemple, dans la figure 4.1, la partie bleue sera utilisée par le système et la partie rose sera utilisée par les cœurs roses. Ainsi, il devient possible d’effectuer les communications inter-modèles via des sections de mémoires partagées. En effet, les données produites lors de sessions de test et de simulation sont émises par un producteur unique vers un ou plusieurs lecteurs. Dès lors les coûts de communication inter-modèles deviennent constants indépendamment

de leur taille.