« Fonctionnement d'un ordinateur/Les architectures à parallélisme de données » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 103 :
[[File:Processeur vectoriel à registres vectoriels.png|centre|vignette|upright=2|Processeur vectoriel à registres vectoriels.]]
 
GénéralementDans le cas le plus simple, les données d'un vecteur sont placées les unes à coté des autrescontigües en mémoire et l'instruction peut utiliser le mode d''''adressage vectoriel absolu'''. Avec lece mode d'adressage absolu, les instructions ont juste à préciser l'adresse mémoire d'undu vecteur,début quidu n'est alors qu'un paquet de données contigües en mémoirevecteur. Par exemple, si mon processeur manipuleAvec des vecteurs de 8 octets, chaquetoute instruction d'accès mémoire utilisant le mode d'adressage absolu va lire ou écrire dans des blocs de 8 octets. L'adresse de départ de ces blocs n'est soumise à aucunedes contraintecontraintes d'alignement, ce qui n'est pas le cas sur les processeurs modernes utilisant des jeux d'instructions comme le SSE, le MMX, etc. La raison à cela est que gérer des accès non alignés en mémoire rend les circuits de lecture/écriture en mémoire plus complexes. En contrepartie, ces contraintes compliquent l'utilisation des instructions vectorielle. Parpar exemple, unle compilateur aura plus de mal à utiliser des instructions de calcul vectorielle en présence de contraintes d'alignement.
 
D'autres modes d'adressage des vecteurs permettent à une instruction de charger des données dispersées en mémoire pour les rassembler dans un vecteur. On peut notamment citer l'existence d'accès mémoires en stride et en scatter-gather.
Mais d'autres modes de chargements et d'enregistrement de nos vecteurs sont disponibles. On peut notamment citer l'existence d'accès mémoires en stride et en scatter-gather. Ils permettent à une instruction de charger des données dispersées en mémoire pour les rassembler dans un vecteur. L''''accès en stride''' permet de charger ou d'enregistrer les données d'un vecteur qui sont séparées par un intervalle régulier d'adresses. Une instruction d'accès mémoire voulant utiliser ce mode d'accès a besoin de connaitre l'adresse initiale, celle du premier élément de notre vecteur, et la distance entre deux données en mémoire. Ce mode d'accès permet aux instructions de mieux gérer les tableaux de structures, ainsi que les tableaux multi-dimensionnels. Lorsqu'on utilise de tels tableaux, il arrive aussi assez souvent que l'on n'accède qu'à certains éléments tous séparés par une même distance. Par exemple, si on fait des calculs de géométrie dans l'espace, on peut très bien ne vouloir traiter que les coordonnées sur l'axe des x, sans accès sur l'axe des y ou des z. Nos instructions d'accès mémoire en stride permettent à notre processeur de gérer de tels cas efficacement.
 
Mais d'autres modes de chargements et d'enregistrement de nos vecteurs sont disponibles. On peut notamment citer l'existence d'accès mémoires en stride et en scatter-gather. Ils permettent à une instruction de charger des données dispersées en mémoire pour les rassembler dans un vecteur. L''''accès en stride''' permetregroupe de charger ou d'enregistrer lesdes données d'un vecteur qui sont séparées par un intervalle régulier d'adresses. Une instruction d'accès mémoire voulant utiliser ceCe mode d'accès a besoin de connaitre l'adresse initiale, de celle du premier élément de notredu vecteur, et de la distance entre deux données en mémoire. Ce mode d'accèsIl permet aux instructions de mieux gérer les tableaux de structures, ainsi que les tableaux multi-dimensionnels. Lorsqu'on utilise de tels tableaux, il arrive aussi assez souvent que l'on n'accède qu'à certainsdes éléments tous séparés par une même distance. Par exemple, si on fait des calculs de géométrie dans l'espace, on peut très bien ne vouloir traiter que les coordonnées sur l'axe des x, sans accès sur l'axe des y ou des z. NosLes instructions d'accès mémoire en strideenjambées permettent à notre processeur de gérergèrent de tels cas efficacement.
Les processeurs vectoriels incorporent aussi un dernier type d'accès à la mémoire : le '''scatter-gather'''. Les accès en Scatter-Gather peuvent être vus comme une généralisation de l'adressage indirect à registre aux vecteurs : chaque élément du vecteur est adressé via adressage indirect. Cet accès demande d'avoir une liste d'adresses mémoires des données. Quand une instruction exécute un accès en scatter, les données présentes dans ces adresses sont rassemblées dans un vecteur, et enregistrée dans un registre vectoriel. Bien sûr, il existe aussi l’inverse : on peut écrire les données d'un vecteur dans des emplacements mémoires dispersés : c'est l'accès en gather. Cet accès sert à mieux gérer les matrices creuses. Dans ces matrices, une grande partie des éléments sont nuls. Dans un souci d'optimisation, seuls les éléments non nuls de la matrice sont stockés en mémoire. Avec ce genre d'organisation, les instructions vectorielles ne seraient pas utilisables sur ce genre de matrices, sans Scatter-Gather
 
Les processeurs vectoriels incorporent aussi unles dernier type d'accès à la mémoire : leen '''scatter-gather'''. Les accès en ''Scatter-Gather'' peuvent être vus comme une généralisation de l'adressage indirect à registre aux vecteurs :, chaque élément du vecteur estétant adressé via adressage indirect. Cet accès demande d'avoir unela liste d'des adresses mémoires des données. Quand une instruction exécute un accès en scatter''Scatter'', les données présentes dans ces adresses sont rassemblées dans un vecteur, et enregistrée dans un registre vectoriel. Bien sûr, il existe aussi l’inverse :pour on peut écrire les données dl'un vecteur dans des emplacements mémoires dispersésécriture : c'est l'accès en gather''Gather''. Cet accès sert à mieux gérer les matrices creuses., Dans cesdes matrices, une grande partie des éléments sont nuls. Danset où, dans un souci d'optimisation, seuls les éléments non nuls de la matrice sont stockés en mémoire. Avec ce genre d'organisation, les instructions vectorielles ne seraient pas utilisables sur ce genre de matrices, sans Scatter-Gather
 
[[File:Cuda4.png|centre|vignette|upright=2|Adressage en scatter-gather]]