Accélérateur vs coprocesseur dans SoC ou APU : différences et similitudes

Aujourd'hui, tout processeur est un amalgame complexe de différents types de cœurs qui gèrent la majeure partie du travail, effectuent des tâches spécialisées ou collaborent les uns avec les autres pour obtenir le meilleur résultat possible lors de l'exécution des différents processus. Dans tous les cas, il existe des différences entre ce qu'est un accélérateur et un coprocesseur en tant que cœurs de support. Lisez la suite pour comprendre ce qu'ils sont.

Accélérateur vs coprocesseur dans SoC ou APU

Il est très clair qu'un Processeur ne peut pas faire le travail par lui-même, il existe des opérations courantes qu'un ordinateur effectue en permanence dans lesquelles un processeur polyvalent n'est pas efficace, mais tout d'abord, nous devons comprendre ce que cela signifie et pourquoi elles sont nécessaires. puces de soutien.

Lors de la conception d'une nouvelle architecture, une série de paramètres marquent les limites que les ingénieurs ne doivent pas dépasser, notamment le type de bibliothèques utilisées pour la conception, la consommation de la puce, quelle sera-t-elle ? sa taille, mais surtout quels problèmes communs il cherche à résoudre avec le nouveau processeur. C'est à ce stade que non seulement les unités principales sont définies, mais aussi les coprocesseurs et les accélérateurs qui en feront partie.

Les premiers processeurs de support qui sont placés dans une architecture sont faciles à élucider, généralement ceux qui ont été conçus pour des architectures antérieures de la même marque ou, à défaut, ceux qui ont été licenciés à des tiers. Ces derniers, en revanche, naissent au cours du développement, à la suite de demandes des clients ou en raison du type de problème à résoudre qui nécessite un nouveau type d'unité matérielle.

Qu'est-ce qu'un coprocesseur ?

Coprocesseur x87

Bien que le signifiant soit explicite, il est important de garder à l'esprit que si nous avons plusieurs noyaux travaillant ensemble pour résoudre le même problème commun aux parties distribuées, alors nous parlons de chacune des unités de processus agissant en co-traitement avec les autres. . Et oui, nous savons ce qui vous a traversé l'esprit, mais lorsque nous avons plusieurs cœurs d'un processeur s'attaquant à un problème spécifique, nous parlons de ceux qui n'exécutent pas le processus principal agissent en tant que coprocesseurs des autres.

Les puces de support sont traditionnellement appelées coprocesseurs, bien que le coprocesseur le plus célèbre de l'histoire du PC soit le coprocesseur mathématique, qui n'était rien de plus que ce qui deviendrait plus tard l'unité à virgule flottante ou FPU totalement découplé du CPU principal. Ainsi, le coprocesseur manque généralement d'un processus de capture des instructions en mémoire, mais a plutôt besoin d'un autre processeur pour envoyer les instructions et les données à traiter. Le travail du coprocesseur ? Résolvez cette partie du programme et renvoyez le résultat le plus rapidement possible au processeur hôte.

Pendant que le coprocesseur est chargé de faire son travail, le noyau principal peut utiliser la puissance qu'il a acquise pour effectuer d'autres tâches, mais puisqu'un processus est exécuté ensemble, le point sera atteint où il ne pourra pas de continuer jusqu'à ce que le ou les coprocesseurs aient terminé la tâche qui leur a été assignée.

Qu'est-ce qu'un accélérateur ?

Matériel d'accélérateur

Techniquement, un accélérateur est un coprocesseur, mais avec une plus grande indépendance que ceux-ci puisqu'ils ne sont pas en charge d'exécuter un processus dans son ensemble, mais plutôt ils se voient attribuer un processus entier que le CPU ignore complètement sauf pour obtenir le résultat final ou pour savoir que la tâche est terminée.

Parce qu'un accélérateur est complètement découplé du processeur, il lui est totalement asynchrone. Qu'entendons-nous? Le fait qu'un accélérateur, par opposition à un coprocesseur, ne fonctionne pas en combinaison avec le processeur principal du système. Cela vous permet d'accélérer votre partie du code, c'est-à-dire de la terminer à une vitesse beaucoup plus élevée et donc en moins de temps. Bien sûr, cela nécessite des changements majeurs dans l'architecture.

Tout d'abord, un coprocesseur peut partager des parties de l'unité de contrôle et même des registres ou accéder à une mémoire commune avec le CPU. Lorsque tous ces éléments sont partagés, ils peuvent créer une congestion dans leur accès, provoquant l'arrêt d'une unité ou d'une autre en attente d'utilisation de ces ressources. Comme vous le comprendrez, cela ne peut pas se produire dans un accélérateur, donc ses données et instructions, bien qu'elles soient fournies par le processeur, sont conçues pour vous être disponibles à 100% du temps, c'est pourquoi de nombreux accélérateurs sont des processeurs complets qui ont leur propre Local. RAM à l'intérieur.

Si un accélérateur est meilleur, pourquoi utilise-t-on un coprocesseur ?

Processeur Portada Alternativa

Nous l'avons dit lors de l'introduction de cet article, tout a à voir avec le budget dont disposent les architectes pour mettre en œuvre la solution à un problème et une chose qui n'est généralement pas prise en compte est les infrastructures de communication entre les différents éléments , ainsi que les unités qui font partie du cycle d'instructions de chaque processeur, mais qui ne sont pas responsables du calcul des nombres à grande vitesse.

Au niveau marketing, il est très facile de vendre la puissance d'un processeur en chiffres, ceux-ci sont aisément compris par des personnes qui peuvent faire une comparaison ordinale ou cardinale à partir desdites données. La réalité est que de nos jours, les infrastructures de tout processeur sont ce qui occupent le plus d'espace et c'est pourquoi la décision d'implémenter quelque chose sous la forme d'un coprocesseur ou d'un accélérateur est simplement prise en raison de ces limitations.

Un exemple sont les noyaux tenseurs et NVIDIAl'unité NVDLA de , les deux ont le même objectif, mais tandis que le premier est un coprocesseur au sein de l'unité de shader qui partage les registres et l'unité de contrôle avec le reste de l'unité GPU unité de shader, dans le cas de la seconde est un processeur lui-même. Sans surprise, l'acronyme DLA signifie Deep Learning Accelerator.