• Aucun résultat trouvé

4.2 Bibliothèque d’IPs mppSoC

4.2.3 Réseau de voisinage

Le réseau de voisinage joue un rôle important dans les systèmes parallèles. Il assure les communications inter-PE. Il permet en effet de communiquer les données entre les PEs voi-sins et de charger les mémoires des PEs avec les données envoyées. Dans mppSoC, le réseau de voisinage peut être configuré selon cinq topologies différentes : linéaire, anneau, maille,

9. Adaptive Look Up Table 10. Adaptive Logic Module

Multiplexeur West Sud Est Nord West Sud Est

Nord Aux PEs voisins Entrées

des PEs voisins

Nord Est Nord Est

µµµµarchitecture Local Local Démultiplexeur Du PE local Au PE local Nord Est Nord West Sud Est Sud West Nord Est Nord West Sud Est Sud West Distance

FIGURE4.19 – Architecture du routeur de voisinage

tore ou Xnet (maille avec des connexions sur les diagonales). Se basant sur le concept de la réutilisation d’IPs, le réseau est formé par un contrôleur et un ensemble de routeurs, qui sont au nombre de PEs, chacun connecté au PE correspondant. Ces routeurs sont connectés selon une topologie définie contrôlée par le contrôleur de réseau et permettent de communiquer les données entre les PEs [9].

Le routeur présente l’élément principal du réseau. Cet IP peut transférer la donnée dans une direction spécifique (Nord, Sud, Est, Ouest, Nord Est, Nord Ouest, Sud Est ou Sud Ouest selon la topologie) telle que demandée par la source. La figure 4.19 montre l’archi-tecture interne du routeur. Ce routeur reçoit des données de son PE et d’un autre routeur et les transmets au routeur correspondant et à son PE respectivement. Il contient en effet un multiplexeur 8 :1 afin de détecter la présence d’une donnée venant d’un PE voisin et de l’acheminer vers le PE local. Cette donnée sera alors directement stockée dans la mémoire du PE à l’adresse demandée. Un démultiplexeur 1 :8 permet de faire le travail inverse vu qu’il est responsable de communiquer la donnée du PE local vers la destination requise. Les destinations possibles sont au nombre de huit (nombre de destinations maximales dans le cas de Xnet) qui sont activées ou désactivées dépendamment de la topologie implémentée.

Les données communiquées via le routeur ne sont pas stockées dans des files de type FIFO vu que les communications de voisinage sont synchrones s’effectuant toutes dans une seule direction à un instant donné. En effet dans une communication SIMD synchrone où tous les PEs effectuent la même opération à un instant donné, nous n’avons pas besoin d’in-clure des tampons ou bien de la logique supplémentaire pour gérer la congestion. Une fonc-tion d’interconnexion SIMD est une bijecfonc-tion, et donc le transfert de données s’effectue sans conflits. À chaque communication, chaque routeur active seulement un lien vers la direction requise. Les autres liens vers les autres directions seront désactivés. Cela permet de réduire la consommation de puissance.

Le réseau généré peut aussi supporter des communications inter-PE entre deux voisins qui ne sont pas directement connectés, par exemple espacés par un PE intermédiaire. Par conséquent, un port de sortie permet d’indiquer la distance demandée entre le PE source et le PE destinataire. L’implémentation actuelle de mppSoC permet des communications inter-PE distantes entre deux inter-PEs séparés par un inter-PE intermédiaire, telle qu’illustré dans la figure 4.20. Cependant, nous pouvons ajouter d’autres communications distantes. Ceci demande d’ajouter plus de logique de contrôle ce qui consomme plus de ressources sur l’FPGA. La connexion entre les routeurs est gérée au niveau du fichier VHDL principal connectant les différents composants du système (top level). À ce niveau, nous utilisons un code générique

4.2 Bibliothèque d’IPs mppSoC 89

RC1 RC2 RC3 RC4

RC5 RC6 RC7 RC8

RC9 RC10 RC11 RC12

RC13 RC14 RC15 RC16

FIGURE4.20 – Connexions entre les RC dans une topologie maille

afin d’établir les connexions voulues en fonction de la topologie du réseau choisie. L’exemple de code VHDL suivant montre les connexions des routeurs pour une topologie de voisinage linéaire :

cond1 : if (Topreg=4) generate - - Topologie linéaire datamesh(0)(0)<= DataReg(0)(0)(2) ;

adrmesh(0)(0)<= AdrReg(0)(0)(2) ; d0 : for i in 1 to (sl_nb_column-2) generate datamesh(0)(i)<= DataReg(0)(i-1)(3) ; datamesh(0)(i)<= DataReg(0)(i+1)(2) ; adrmesh(0)(i)<= AdrReg(0)(i-1)(3) ; adrmesh(0)(i)<= AdrReg(0)(i+1)(2) ; end generate d0 ; datamesh(0)(sl_nb_column-1)<= DataReg(0)(sl_nb_column-2)(3) ; adrmesh(0)(sl_nb_column-1)<= AdrReg(0)(sl_nb_column-2)(3) ; end generate cond1 ;

Étant donné que chaque routeur communique dans un seul sens à un instant donné, sa conception est simple avec une petite taille et assure des communications de voisinage limi-tées seulement par le temps de propagation des fils. Un routeur nécessite environ 4 ALUTs, 62 ALMs et 64 registres sur un FPGA stratix 2S180 (<1%), ce qui montre la simplicité de son architecture. Les communications de voisinage sont gérées par des instructions de communi-cation, qui seront détaillées dans la section 4.3, permettant à chaque PE de communiquer des données à son voisin. Étant donné que cette communication est totalement contrôlée par des instructions et vu que l’exécution est orchestrée par l’ACU, les liens de communication sont déterministes et exempts de problèmes de congestion ou de blocage. En outre, chaque PE n’a besoin que d’un multiplexeur 8 :1 et d’un démultiplexeur 1 :8 pour ses communications de voisinage, telle que décrit précédemment. Cela confirme bien la simplicité du routeur.

Les instructions de communication se basent sur des lectures/écritures en mémoire. Un processus teste continuellement l’adresse émise par le processeur élémentaire. Dés qu’une adresse de voisinage est détectée (format connue) la donnée sera acheminée vers le routeur qui s’occupe par la communiquer vers la direction demandée.

Prenons l’exemple du processeur miniMIPS. La figure 4.21 illustre les connexions entre le routeur, le PE ainsi que sa mémoire locale. Chaque PE est connecté à son routeur de voisi-nage via les signaux d’adresse, de donnée et de bit de lecture/écriture mémoire. Dés qu’une adresse de voisinage est détectée accompagnée par une demande d’écriture mémoire (bit de lecture/écriture activé à 1), elle sera connectée avec la donnée aux entrées du routeur. Le routeur décode la destination demandée à partir de l’adresse reçue et active alors son port

PEM PE (miniMIPS) PE RC PEM clock Ordre d’exécution parallèle ram_adr ram_ack ram_r_w ram_data reset Routeur Donnée au PE local ram_ben it_mat ram_req Adresse au PE local Routeur Donnée du PE voisin Adresse du PE voisin Donnée à envoyer Adresse à envoyer Adresse au PE local

FIGURE4.21 – Architecture de l’unité élémentaire à base du processeur miniMIPS

de sortie approprié. Il peut ensuite acheminer la donnée avec l’adresse mémoire spécifiée (où sera stockée la donnée dans le PE voisin) à la sortie correspondante. Dés que reçue par le routeur du PE receveur, la donnée sera directement stockée dans la mémoire à l’adresse spécifiée.