ALU sur CPU et GPU : types, fonctionnalités et fonctionnement

ALU sur CPU et GPU

L'ALU ou connu en espagnol comme une unité logico-arithmétique sont les unités dans un Processeur ou GPU qui sont littéralement en charge du calcul des nombres et sont donc responsables de tous les calculs mathématiques qui sont effectués plusieurs milliards de fois par seconde dans nos PC Mais comment fonctionnent-ils, de quels types existe-t-il et quels sont les secrets des unités ALU ? Continuez à lire pour le découvrir.

La première ALU à sortir ne faisait pas partie d'un CPU, mais plutôt d'une puce de la série 7400 avec une interface TTL de Texas Instruments, la 74181 était la première ALU intégrée sur une seule puce. Il n'était que de 4 bits et a été utilisé dans divers mini-ordinateurs au cours des années 1960, marquant la première grande transition dans l'informatique.

La construction des premiers CPU complets dans les années 70 et avec tous les éléments correspondants pour exécuter un cycle d'instruction complet a évidemment dû compter sur l'intégration des ALU pour calculer les instructions logiques et arithmétiques à l'intérieur de la puce.

Types d'ALU

Escalier SIMD

Nous pouvons diviser les ALU en deux subdivisions différentes, la première est par type de nombre à calculer et donc si elle est exploitée avec des nombres entiers ou avec virgule flottante, où dans ce dernier cas on parle de fonctionner avec des décimales. Les opérations à virgule flottante suivent une règle qui indique combien de bits du nombre correspondent à la partie entière et combien à la partie fractionnaire.

Les normes dans les deux cas indiquent également si le premier nombre marque le signe ou non, par exemple un nombre en entiers de 8 bits peut représenter un chiffre de 0 à 255 ou de -127 à 127 selon le format utilisé.

La deuxième catégorisation fait référence au nombre de données et d'instructions qu'une ALU exécute en même temps. La forme la plus simple étant l'ALU scalaire où une opération ou une instruction est exécutée par opérande. Nous avons également les unités SIMD ou vectorielles, qui exécutent la même instruction avec différents opérandes en même temps.

Types d'opérations avec une ALU

Binaire ALU suma

Tout d'abord, nous devons avoir une ALU qui ne peut pas fonctionner toute seule, donc une unité de contrôle sera nécessaire pour indiquer quelle instruction exécuter et sur quelles données le faire. Donc dans cette explication nous allons supposer que nous avons une unité de contrôle accompagnant notre ALU.

Une ALU qui permet à tout type de processeur, que ce soit un CPU ou un GPU, d'effectuer des opérations mathématiques avec des nombres binaires. Ce n'est donc rien de plus qu'une calculatrice binaire, étant le type d'ALU le plus simple celui qui permet d'ajouter deux nombres de 1 bit chacun, ce qui serait une opération qui serait la suivante :

Opération Résultat Traction
0 + 0 0 0
0 + 1 1 0
1 + 0 1 0
1 + 1 1 1

Si vous regardez ceux-ci, ce sont les spécifications d'une porte logique de type OU, mais nous trouvons un problème qui est à porter lors de l'ajout de 1 + 1, puisque le résultat de l'ajout de 1 + 1 binaire est 10 et non 1. Donc il faut prendre en compte que 1 dans le carry que l'on porte et donc une simple porte OU ne suffit pas, surtout si on veut travailler avec une précision beaucoup plus élevée en bits et donc avoir une ALU beaucoup plus complexe en nombre de bits.

Soustraction binaire dans une ALU

ALU reste binaire

La soustraction ou la soustraction peut être dérivée avec la formule suivante :

A – B = A + PAS (B) +1

L'astuce ici est très simple, elle repose sur le fait que nous travaillons avec des entiers binaires. Cela ne fonctionne pas avec les nombres à virgule flottante. Nous pouvons utiliser le même mécanisme que celui utilisé pour additionner deux nombres pour effectuer l'opération de soustraction. Tout ce que nous avons à faire est d'inverser la valeur de la seconde opérant à travers une série de portes NON et d'ajouter 1 au résultat final. Grâce à eux, nous pouvons utiliser le même matériel pour effectuer une opération d'addition pour effectuer une soustraction.

Multiplication binaire et division en puissances de 2

Division de multiplication ALU

La forme la plus simple de multiplication dans un système binaire est la multiplication par des nombres multiples de 2, étant un système binaire, nous n'avons qu'à mettre en œuvre un mécanisme où les données d'entrée sont décalées de plusieurs positions vers la gauche, si nous multiplions, ou vers la gauche . à droite, si nous divisons. Le nombre de postes ? Cela dépend de l'indice de puissance de 2 du multiplicateur, donc si nous multiplions par 8 qui est 2 ^ 3 alors nous devrons décaler le nombre de 3 positions vers la gauche et s'il divise 3 positions vers la droite. C'est pour cette raison que les ALU intègrent également des opérations de décalage de bits, qui sont à la base de la multiplication ou de la division par multiples de 2.

Mais si nous parlons de multiplier d'autres types de nombres, il est préférable de revenir à l'époque où nous étions petits à l'école.

Multiplication avec non-puissance de 2 nombres

Multiplication binaria ALU

Pendant de nombreuses années, les ALU étaient très simples et ne pouvaient que s'additionner, car elles n'avaient pas d'ALU destinées à la multiplication. Comment se sont-ils comportés alors ? Eh bien, exécuter plusieurs sommes concaténées qui leur ont pris de nombreux cycles. Comme curiosité historique, l'un des premiers processeurs domestiques à avoir une unité de multiplication était le Intel 8086.

Supposons que nous voulions multiplier 25 x 25, quand nous étions petits, ce que nous avons fait était ce qui suit :

  • Nous multiplions d'abord 25 x 5 et notons le résultat, qui est 125.
  • Deuxièmement, nous multiplions 25 x 2, ce qui nous donne 50 et nous écrivons le résultat mais en déplaçant une position vers la gauche.
  • Nous ajoutons les deux nombres, puisque nous avons le deuxième nombre décalé vers la gauche, le résultat de la somme n'est pas 175, mais 625, ce qui est le résultat de la multiplication de 25 x 25 en décimal.

Eh bien, en binaire, le processus est le même, mais le nombre 25 dans ce cas est 11001 et donc un nombre à 5 bits. Donc binaire, nous allons multiplier 11001 x 11001 et pour cela, nous allons devoir utiliser des portes ET.

  • Premièrement, nous multiplions 11001 x 1 = 11001
  • Deuxièmement, nous multiplions 11001 x 0 = 0000, nous écrivons le résultat une place à gauche.
  • Troisièmement, nous multiplions 11001 x 0 = 0000, nous écrivons le résultat deux places à gauche.
  • Quatrièmement, nous multiplions 11001 x 1 = 11001, nous écrivons le résultat trois places à gauche
  • Cinquièmement, nous multiplions 11001 x 1 = 11001, nous écrivons le résultat quatre places à gauche
  • En tenant compte de la position de chaque opération on ajoute le résultat, qui ne doit pas donner de résultat 01001110001

Opérations mathématiques plus complexes

Avec ce qui précède, vous pouvez construire des unités pour effectuer des opérations mathématiques beaucoup plus complexes telles que des divisions, des racines carrées, des puissances, etc. Plus l'opération sera complexe, évidemment, il faudra plus de transistors. En fait, pour chaque opération, il existe un mécanisme différent et lorsque l'unité de contrôle indique à une ALU le type d'opération à exécuter, elle lui dit qu'elle doit utiliser ce mécanisme spécifique pour cette opération mathématique spécifique.

L'important étant d'économiser sur les transistors, les opérations les plus complexes sont définies comme une succession des plus simples afin de réutiliser le matériel. Cela conduit à ces opérations plus complexes nécessitant un nombre plus élevé de cycles d'horloge. Bien que dans certaines conceptions, des mécanismes complets soient mis en œuvre qui permettent d'effectuer ces opérations en un nombre de cycles beaucoup plus petit et même en un seul cycle dans de nombreux cas, mais ils ne sont pas courants dans les processeurs.

Là où ils sont utilisés dans les GPU, où nous voyons un type d'unité appelé Unité de fonction spéciale qui est responsable de l'exécution de ce que nous appelons des opérations transcendantales telles que les rapports trigonométriques utilisés en géométrie.

Où l'ALU obtient-elle les données pour fonctionner ?

Archives

Tout d'abord, il faut garder à l'esprit qu'une ALU ne fonctionne pas avec les données en mémoire, mais que dans le processus de capture et de décodage les données avec lesquelles elle doit travailler sont stockées dans un registre appelé accumulateur, sur lequel le opérations.

Dans certains systèmes plus complexes, plusieurs registres sont utilisés pour les opérations arithmétiques et, dans certains cas, même des registres spéciaux pour certaines instructions. Qui sont documentés la plupart du temps, mais dans d'autres cas, parce qu'ils ne sont utilisés que dans certaines instructions, ils ne sont généralement pas documentés.

La raison d'utiliser les registres est leur proximité avec l'ALU, si le RAM la mémoire est utilisée, il faudrait alors beaucoup plus de temps pour effectuer une opération simple. L'autre raison est que beaucoup plus d'énergie serait consommée pour effectuer une opération.

Avec tout cela, il est expliqué comment fonctionne une ALU, au moins en termes de base.