close

Exécution explicite du graphe de données

Aller à la navigation Aller à la recherche

Explicit Data Graph Execution ou EDGE est un jeu d'instructions qui, au lieu d'utiliser l'approche traditionnelle instruction/registre typique des architectures RISC et CISC , suit une nouvelle voie. Les processeurs basés sur EDGE divisent les programmes en blocs de base, ces blocs sont des groupes d'instructions qui fonctionnent sur des opérandes communs et qui ne contiennent pas de conditions de saut ou d'autres conditions qui arrêtent le flux d'instructions. Ces blocs sont répartis au sein d'unités qui les traitent indépendamment, les résultats sont transmis aux blocs qui en ont besoin pour continuer le traitement. La distribution des blocs s'effectue de manière dynamique et cette philosophie d'exécution permet de développer des programmes qui n'ont pas à accéder en permanence aux registres pour échanger des données entre les blocs, ceci élimine un goulot d'étranglement présent dans les microprocesseurs classiques. Ce type de processeur divisant le programme en blocs indépendants démontre une plus grande capacité à exécuter du code parallèle.

Le jeu d'instructions EDGE définit une série d'instructions pour gérer les blocs individuels, le jeu d'instructions gère le codage des données dans le bloc afin de réduire les dépendances sur les données (via l' exécution prédicative ) et vous permet de spécifier les dépendances entre les blocs. Les données sont utilisées pour définir le flux de contrôle des instructions, les données définissent un graphe des dépendances que le processeur doit satisfaire lors de l'exécution. Les instructions simples définies avec EDGE sont en moyenne plus chères que celles définies par un processeur RISC ou CISC mais le coût plus élevé est atténué avec l'utilisation de blocs de taille moyenne à grande (l'implémentation EDGE utilise des blocs de 1024 instructions) et avec la possibilité d'utilisation plusieurs unités de calcul parallèles.

BORD.png
L'image montre un fragment de code C (boîte verte), le code assembleur correspondant (boîte bleue) et le graphe de dépendance généré par les instructions EDGE (boîte blanche). Notez que le saut conditionnel (IF) est converti en instructions prédicatives (mises en évidence par les segments en pointillés)

Le jeu d'instructions EDGE utilise des blocs comme base et chaque bloc est mappé dans une seule unité d'exécution. Les blocs individuels n'ont pas d'instructions de contrôle de flux à l'intérieur, ils n'interviennent qu'entre les blocs, cependant les blocs peuvent avoir des instructions prédicatives afin d'insérer les instructions de flux les plus courantes (telles que les IF) à l'intérieur des blocs. Le graphe qui définit l'exécution du programme est défini avec des relations de concurrence entre blocs, ces relations précisent le flux de données d'un bloc à l'autre ou d'un bloc vers une zone mémoire commune. Chaque bloc peut être un programme séquentiel unique ou un programme SIMD . Le compilateur rassemble les instructions qui utilisent les mêmes données dans des blocs et place les instructions qui ont besoin des résultats d'autres blocs à côté d'eux afin de minimiser le temps de transit des données entre les blocs.

Objets associés

Liens externes