Processeur dans les systèmes parallèles

Dans les années 80, un processeur à usage spécial était populaire pour fabriquer des multi-ordinateurs appelés Transputer. Un transputer se composait d'un processeur central, d'une petite mémoire SRAM, d'une interface de mémoire principale DRAM et de quatre canaux de communication, le tout sur une seule puce. Pour établir une communication informatique parallèle, des canaux ont été connectés pour former un réseau de Transputers. Mais il manque de puissance de calcul et ne peut donc pas répondre à la demande croissante d'applications parallèles. Ce problème a été résolu par le développement de processeurs RISC et il était également bon marché.

L'ordinateur parallèle moderne utilise des microprocesseurs qui utilisent le parallélisme à plusieurs niveaux comme le parallélisme au niveau des instructions et le parallélisme au niveau des données.

Processeurs hautes performances

Les processeurs RISC et RISCy dominent aujourd'hui le marché des ordinateurs parallèles.

Les caractéristiques du RISC traditionnel sont:

  • A peu de modes d'adressage.
  • A un format fixe pour les instructions, généralement 32 ou 64 bits.
  • A des instructions de chargement / stockage dédiées pour charger les données de la mémoire pour enregistrer et stocker les données du registre vers la mémoire.
  • Les opérations arithmétiques sont toujours effectuées sur les registres.
  • Utilise le pipelining.

La plupart des microprocesseurs de nos jours sont superscalaires, c'est-à-dire que dans un ordinateur parallèle plusieurs pipelines d'instructions sont utilisés. Par conséquent, les processeurs superscalaires peuvent exécuter plus d'une instruction en même temps. L'efficacité des processeurs superscalaires dépend de la quantité de parallélisme de niveau instruction (ILP) disponible dans les applications. Pour garder les pipelines remplis, les instructions au niveau matériel sont exécutées dans un ordre différent de celui du programme.

De nombreux microprocesseurs modernes utilisent une approche de super pipelining . En super pipelining , pour augmenter la fréquence d'horloge, le travail effectué dans un étage de pipeline est réduit et le nombre d'étages de pipeline est augmenté.

Processeurs de très gros mots d'instruction (VLIW)

Ceux-ci sont dérivés de la microprogrammation horizontale et du traitement superscalaire. Les instructions des processeurs VLIW sont très volumineuses. Les opérations au sein d'une même instruction sont exécutées en parallèle et sont transmises aux unités fonctionnelles appropriées pour exécution. Ainsi, après avoir récupéré une instruction VLIW, ses opérations sont décodées. Ensuite, les opérations sont envoyées aux unités fonctionnelles dans lesquelles elles sont exécutées en parallèle.

Processeurs vectoriels

Les processeurs vectoriels sont du coprocesseur en microprocesseur à usage général. Les processeurs vectoriels sont généralement des registres-registres ou des mémoires-mémoire. Une instruction vectorielle est extraite et décodée, puis une certaine opération est effectuée pour chaque élément des vecteurs d'opérande, alors que dans un processeur normal, une opération vectorielle nécessite une structure de boucle dans le code. Pour le rendre plus efficace, les processeurs vectoriels enchaînent plusieurs opérations vectorielles ensemble, c'est-à-dire que le résultat d'une opération vectorielle est transmis à une autre comme opérande.

Mise en cache

Les caches sont un élément important des microprocesseurs haute performance. Tous les 18 mois, la vitesse des microprocesseurs devient deux fois, mais les puces DRAM pour la mémoire principale ne peuvent rivaliser avec cette vitesse. Ainsi, les caches sont introduits pour combler l'écart de vitesse entre le processeur et la mémoire. Un cache est une mémoire SRAM rapide et petite. De nombreux autres caches sont appliqués dans les processeurs modernes tels que les caches TLB, les caches d'instructions et de données, etc.

Cache mappé direct

Dans les caches mappés directement, une fonction «modulo» est utilisée pour le mappage un à un des adresses de la mémoire principale aux emplacements de cache. Comme une même entrée de cache peut avoir plusieurs blocs de mémoire principale mappés sur elle, le processeur doit être en mesure de déterminer si un bloc de données dans le cache est le bloc de données réellement nécessaire. Cette identification se fait en stockant une étiquette avec un bloc de cache.

Cache entièrement associatif

Un mappage entièrement associatif permet de placer un bloc de cache n'importe où dans le cache. En utilisant une politique de remplacement, le cache détermine une entrée de cache dans laquelle il stocke un bloc de cache. Les caches entièrement associatifs ont un mappage flexible, ce qui minimise le nombre de conflits d'entrée de cache. Puisqu'une mise en œuvre entièrement associative est coûteuse, celles-ci ne sont jamais utilisées à grande échelle.

Cache associatif d'ensemble

Un mappage associatif d'ensemble est une combinaison d'un mappage direct et d'un mappage entièrement associatif. Dans ce cas, les entrées de cache sont subdivisées en ensembles de cache. Comme dans le mappage direct, il existe un mappage fixe des blocs de mémoire vers un ensemble dans le cache. Mais à l'intérieur d'un ensemble de cache, un bloc de mémoire est mappé de manière totalement associative.

Stratégies de cache

Outre le mécanisme de mappage, les caches ont également besoin d'une gamme de stratégies qui spécifient ce qui doit se passer dans le cas de certains événements. Dans le cas de caches associatifs (ensemble), le cache doit déterminer quel bloc de cache doit être remplacé par un nouveau bloc entrant dans le cache.

Certaines stratégies de remplacement bien connues sont -

  • Premier entré, premier sorti (FIFO)
  • Le moins récemment utilisé (LRU)