Avons-nous vraiment besoin d'autant de xPU ?

Mise à jour : 17 novembre 2021

"Ces dernières années, des annonces concernant de nouvelles architectures de processeurs ont été publiées presque tous les jours, avec un acronyme à trois lettres – TPU, IPU, NPU. Mais qu'est-ce qui les distingue vraiment ? Y a-t-il vraiment autant d'architectures de processeurs uniques, ou quelque chose d'autre s'est-il produit ?

"

Ces dernières années, des annonces concernant de nouvelles architectures de processeurs ont été publiées presque tous les jours, et un acronyme à trois lettres-TPU, IPU, NPU a été donné. Mais qu'est-ce qui les distingue vraiment ? Y a-t-il vraiment autant d'architectures de processeurs uniques, ou quelque chose d'autre s'est-il produit ?

En 2018, John L. Hennessy et David A. Patterson ont donné une conférence à Turing intitulée « The New Golden Age of Computer Architecture ». Ils sont préoccupés par le processeur et son développement, mais ce n'est qu'une petite partie de l'équation. Le chercheur et architecte système Arteris IP Michael Frank a déclaré : « Du point de vue du processeur, la plupart de ces xPU ne sont pas de vrais processeurs. » « Ils ressemblent davantage à un GPU, un accélérateur pour des charges de travail spéciales. Et ils ont beaucoup de diversité à l'intérieur. L'apprentissage automatique est un type de processeur, vous pouvez les appeler collectivement des accélérateurs d'apprentissage automatique, mais ils accélèrent la partie traitement d'une variété de.

L'essence du processeur peut se résumer à trois choses. "En dernière analyse, cela revient à l'architecture du jeu d'instructions (ISA)", a déclaré Manuel Uhm, directeur du marketing des puces chez Xilinx. « Cela définit ce que vous voulez faire. Ensuite, vous avez les E/S et la mémoire, qui prennent en charge l'ISA et les tâches qu'il essaie d'accomplir. Ce sera une période très intéressante à l'avenir, car nous verrons plus que les deux ou trois dernières années le temps de plus d'innovation et de changement.

De nombreuses nouvelles architectures ne sont pas des processeurs uniques. "Ce que nous voyons est une combinaison de différents types de processeurs ou de moteurs programmables qui existent dans le même SoC ou le même système", a déclaré Pierre-Xavier Thomas, directeur du groupe Cadence. Technologie et marketing stratégique. « Distribuez les tâches logicielles sur différents matériels ou moteurs programmables flexibles. Tous les processeurs peuvent partager une API commune, mais le domaine d'exécution sera différent. Ici, vous verrez en effet différents types de transformation avec différents types de caractéristiques.

La réalité est que la plupart des noms sont marketing.

« Le fait est que les gens utilisent ces noms et acronymes à deux fins différentes », a déclaré Simon Davidmann, PDG d'Imperas Software. « L'un sert à expliquer l'architecture du processeur, comme le SIMD (Single Instruction Multiple Data). L'autre définit le segment d'application auquel il s'adresse. Il peut donc définir l'architecture du processeur, ou quelque chose comme une unité de traitement tensoriel (TPU) Noms de marque. Ils nomment leurs architectures hétérogènes ou homogènes, pas des processeurs individuels.

Un peu d'histoire

Il y a quarante ans, les choses étaient beaucoup plus simples. À cette époque, il existait une unité centrale de traitement (CPU) et il existait de nombreuses variantes, mais il s'agissait essentiellement de processeurs complets de Turing avec une architecture von Neumann. Chacun a un jeu d'instructions différent qui les rend plus efficaces pour certaines tâches, et il y a beaucoup de discussions sur les avantages relatifs du jeu d'instructions complexe (CISC) et du jeu d'instructions réduit (RISC).

L'émergence de RISC-V a attiré beaucoup d'attention sur ISA. « Les gens veulent comprendre l'ISA parce que c'est l'ISA qui définit à quel point le processeur est optimisé pour des tâches définies », a déclaré Uhm de Xilinx. « Ils peuvent consulter l'ISA et démarrer le cycle de calcul. Si un ISA a des instructions natives et fonctionne à 1 GHz, je peux le comparer avec un autre processeur ISA, qui peut nécessiter deux instructions pour la même fonction, mais le processeur fonctionne à 1.5 GHz. Laquelle me fait aller plus loin ? Ils font des calculs mathématiques pour des fonctions importantes.

Il existe plusieurs méthodes de packaging pour les CPU. Parfois, les E/S ou la mémoire sont placés dans le même package. Ils sont appelés unités de microcontrôleur (MCU).

Lorsque les modems sont devenus populaires, les processeurs de signaux numériques (DSP) sont apparus, et leur différence était qu'ils utilisaient l'architecture Harvard. Cela sépare le bus de commande du bus de données. Certains d'entre eux ont également mis en place une architecture SIMD pour rendre le traitement des données plus efficace.

La séparation des instructions et des données vise à améliorer le débit, bien qu'elle limite certaines programmations périphériques qui peuvent être effectuées, telles que les programmes auto-écrits. "Habituellement, les conditions aux limites ne sont pas des calculs", a déclaré Uhm. « Il s'agit de plus en plus d'E/S ou de mémoire. L'industrie passe de l'augmentation de la puissance de calcul à la garantie qu'il y a suffisamment de données pour maintenir la puissance de calcul et maintenir les performances.

Lorsqu'un seul processeur ne devient plus plus rapide, ils connectent plusieurs processeurs ensemble. Ces processeurs partagent généralement la mémoire et maintiennent le concept d'exhaustivité de Turing pour chaque processeur et l'ensemble du cluster de processeurs. Peu importe sur quel noyau une partie du programme est exécutée, car le résultat est le même.

Le prochain développement majeur est l'unité de traitement graphique (GPU), qui a brisé la convention car chaque élément de traitement ou pipeline a sa propre mémoire et ne peut pas être adressé en dehors du processeur. La mémoire étant limitée, cela signifie qu'il ne peut effectuer aucune tâche de traitement arbitraire, mais ne peut effectuer que des tâches pouvant être placées dans l'espace mémoire fourni.

« Pour certains types de fonctions, les GPU sont des processeurs très puissants, mais leurs pipelines sont très longs », souligne Uhm. « Ces pipelines permettent à l'unité GPU de traiter en continu les données, mais à un moment donné, si vous devez actualiser le pipeline, ce sera un coup dur. Beaucoup de latence et d'incertitude sont intégrées au système.

Bien que de nombreux autres accélérateurs aient été définis, les GPU - et plus tard les GPU à usage général (GPGPU) - ont défini un paradigme de programmation et une pile logicielle qui les rendaient plus faciles à utiliser que les accélérateurs précédents. « Pendant de nombreuses années, certains emplois ont été spécialisés », a déclaré Davidmann d'Imperas. « Il existe un processeur pour les programmes séquentiels. Il y a un processeur graphique, qui se concentre sur le traitement des données pour le pour écran et nous amène dans un monde hautement parallèle. Utilise de nombreux petits éléments de traitement pour effectuer des tâches. Maintenant, il y a des tâches d'apprentissage automatique.

Quelles autres règles de construction peuvent expliquer toute la nouvelle architecture ? Dans le passé, les matrices de processeurs étaient généralement connectées par des topologies de mémoire ou de réseau fixes (telles que maillage ou anneau). Ce qui a récemment émergé, c'est la combinaison de Network on Chip (NoC), qui permet aux processeurs hétérogènes distribués de communiquer de manière plus flexible. À l'avenir, ils pourront également communiquer sans utiliser de mémoire.

"Pour le moment, NoC ne transporte que des données", a déclaré Frank d'Arteris. « À l'avenir, NoC pourra être étendu à d'autres domaines où la communication entre les accélérateurs va au-delà des données. Il peut envoyer des commandes, envoyer des notifications, etc. Les exigences de communication de la matrice d'accélérateurs peuvent être différentes des exigences de communication du CPU ou du SoC standard. Cependant, le réseau sur puce ne vous limitera pas à un sous-ensemble. Vous pouvez optimiser et améliorer les performances en prenant en charge les besoins de communication particuliers des accélérateurs.

Architecture de mise en œuvre

Une façon de différencier les processeurs consiste à optimiser pour un environnement d'exploitation spécifique. Par exemple, le logiciel peut s'exécuter dans le cloud, mais vous pouvez également exécuter le même logiciel sur un micro-appareil IoT. L'architecture de mise en œuvre sera très différente et atteindra différents points de fonctionnement en termes de performances, de consommation électrique, de coût ou de capacité à fonctionner dans des conditions extrêmes.

« Certaines applications sont destinées au cloud computing, et maintenant nous les rapprochons de la périphérie », a déclaré Thomas de Cadence. « Cela peut être dû à des exigences de latence, ou à une dissipation d'énergie ou de puissance, qui nécessiteront un type d'architecture différent. Vous voudrez peut-être avoir exactement la même pile logicielle pour pouvoir fonctionner à deux endroits. Le cloud doit offrir de la flexibilité car il va recevoir différents types d'applications, et doit pouvoir agréger un grand nombre d'utilisateurs. Cela nécessite que le matériel sur le serveur ait des capacités spécifiques à l'application, mais une taille unique ne convient pas à tout le monde.

ML a augmenté ses propres exigences. « Lorsque vous utilisez des réseaux de neurones et l'apprentissage automatique pour créer des systèmes intelligents, vous devez utiliser des cadres logiciels et des piles logicielles générales pour programmer le nouveau réseau et le mapper sur le matériel », a ajouté Thomas. « Ensuite, vous pouvez adapter l'application logicielle au bon matériel du point de vue PPA. Cela entraîne le besoin de différents types de traitement et de processeurs pour pouvoir répondre à ces besoins au niveau matériel. »

Ces exigences sont définies par l'application. "Une entreprise a créé un processeur pour les opérations graphiques", a déclaré Frank. « Ils optimisent et accélèrent le suivi des graphiques et effectuent des opérations telles que la réorganisation des graphiques. Il existe d'autres forces brutes qui accélèrent l'apprentissage automatique, à savoir la multiplication matricielle. L'accès à la mémoire est différent pour chaque architecture C'est un problème particulier car lorsque vous construisez un accélérateur, l'objectif le plus important est de le garder occupé. Vous devez transférer autant de données que possible vers l'ALU car elles peuvent être consommées et produites.

Beaucoup de ces applications ont beaucoup en commun. "Ils ont tous de la mémoire locale, ils ont un réseau sur une puce pour communiquer, et chaque processeur qui exécute un algorithme logiciel traite un petit morceau de données", a déclaré Davidmann. "Ces tâches sont planifiées par des systèmes d'exploitation s'exécutant sur des processeurs plus traditionnels."

La partie délicate pour les concepteurs de matériel est de prédire les tâches qu'ils devront effectuer. "Bien que vous effectuerez des types d'opérations similaires dans certaines couches, les gens font attention à la différenciation dans les couches", a déclaré Thomas. « Afin de pouvoir traiter un réseau de neurones, plusieurs types de puissance de traitement sont nécessaires. Cela signifie que vous devez être capable de traiter une partie du réseau neuronal d'une manière ou d'une autre, puis vous aurez peut-être besoin d'un autre type d'opération pour traiter une autre couche. Mouvement des données Et la quantité de données change également couche par couche.

Cette différenciation peut aller au-delà du mouvement de données. "Pour le séquençage du génome, vous devez effectuer un certain traitement", a déclaré Frank. « Mais vous ne pouvez pas utiliser un seul type d'accélérateur pour tout accélérer. Vous devez créer un ensemble complet d'accélérateurs différents pour différents pipelines. Le CPU devient le gardien du processus d'exécution de la gestion. Il met en place, exécute le DMA et fournit la prise de décision entre les deux processus. Comprendre et analyser les algorithmes et définir comment vous souhaitez optimiser leur traitement est une tâche architecturale complète.

Une partie du processus nécessite un partitionnement. « Il n'existe pas de type de processeur unique qui puisse être optimisé pour chaque tâche de processeur.FPGA n'est pas bon, le CPU n'est pas bon, le GPU n'est pas bon, le DSP est également nécessaire », a déclaré Uhm. « Nous avons créé une série d'appareils qui contiennent tout cela, mais la partie difficile du côté client est qu'ils doivent fournir des informations pour déterminer quelles parties du système global seront ciblées sur le processeur ou la logique programmable, ou dans l'IA. moteur. Tout le monde veut cet outil magique automatique, un outil qui peut immédiatement décider de le mettre sur le CPU, le mettre sur le FPGA et le mettre sur le GPU. Cet outil n'existe pas aujourd'hui.

Néanmoins, le CPU jouera toujours un rôle. "Le processeur est nécessaire pour exécuter des parties irrégulières du programme", a déclaré Frank. « La programmabilité générale du CPU a ses avantages. Si vous avez des structures de données spécialisées ou des opérations mathématiques, cela ne fonctionnera pas bien. Le processeur est un processeur à usage général et il n'est optimisé pour rien. Ce n'est bon à rien. . "

Changer « résumé »

Dans le passé, la frontière matériel/logiciel était définie par l'ISA et la mémoire était adressable en continu. Lorsqu'il y a plusieurs processeurs, ils sont généralement alignés sur la mémoire.

"La cohérence est un contrat", a déclaré Frank. « Ce genre de cohérence est très important et ne disparaîtra pas. Mais vous pouvez imaginer que dans un moteur de flux de données, la cohérence n'est pas si importante, car vous transférez les données se déplaçant à la périphérie directement d'un accélérateur à un autre. Si vous partitionnez l'ensemble de données, la cohérence deviendra un obstacle car cela vous coûtera des cycles supplémentaires. Vous devez vérifier les informations. Vous devez fournir des informations à jour.

Cela nécessite une architecture de mémoire différente. "Vous devez penser à la structure de la mémoire, car vous n'avez qu'une quantité limitée de mémoire étroitement couplée", a déclaré Uhm. « Vous pouvez accéder à la mémoire adjacente, mais vous manquerez rapidement de mémoire adjacente et vous ne pourrez pas y accéder à temps. Cela doit être compris dans la conception. Au fur et à mesure que l'outil mûrit, l'outil commencera à en apprendre davantage. Aujourd'hui, c'est l'intelligence humaine qui le fait, capable de comprendre l'architecture et de l'appliquer.

Un niveau d'abstraction plus élevé est également nécessaire. "Certains frameworks peuvent cartographier ou compiler des réseaux connus pour cibler le matériel", a déclaré Thomas. « Vous disposez d'un ensemble de noyaux ou d'API de bas niveau qui seront utilisés dans la pile logicielle, puis éventuellement utilisés par le mappeur du réseau de neurones. Ci-dessous, vous pouvez avoir différents types de matériel, en fonction de ce que vous souhaitez réaliser, en fonction des détails de votre produit. Il atteint les mêmes fonctionnalités, mais il n'utilise pas le même matériel ni les mêmes compromis PPA.

Cela met beaucoup de pression sur ces compilateurs. « La principale question est de savoir comment programmer l'accélérateur à l'avenir ? » a demandé Frank. « Avez-vous mis en place un moteur câblé comme la première génération de GPU ? Ou avez-vous construit un petit moteur programmable avec votre propre jeu d'instructions ? Maintenant, vous devez programmer ces éléments séparément et les mettre dans chacun d'eux est connecté au flux de données pour effectuer des tâches. Un processeur a un certain sous-ensemble de l'ensemble d'instructions et l'autre processeur a un sous-ensemble différent, et ils partageront tous certaines parties se chevauchant du flux de contrôle. Certains Produits peuvent avoir des capacités d'accélération légèrement différentes. Le compilateur ou les bibliothèques qui le comprennent seront mappés en conséquence.

Résumer

L'architecture du processeur n'a pas changé. Ils suivent toujours les mêmes choix qui existent depuis 40 ans. Ce qui change, c'est la façon dont la puce est construite. Ils contiennent désormais un grand nombre de processeurs hétérogènes avec une mémoire et des communications optimisées pour un sous-ensemble de tâches applicatives. Chaque puce fait un choix différent pour la fonction du processeur et son objectif d'optimisation, le débit de données requis et le flux de données qu'elle voit généralement.

Chaque fournisseur de matériel souhaite distinguer sa propre puce des autres puces, mais il est beaucoup plus facile de faire la promotion par le biais de la marque que de parler de détails techniques internes. Ils lui ont donc donné un nom, l'ont appelé le premier, le plus rapide et le plus grand, et l'ont lié à des types spécifiques de problèmes d'application. Ces acronymes à trois lettres sont devenus des noms de tâches d'application, mais ils ne définissent pas l'architecture matérielle.

Ces dernières années, des annonces concernant de nouvelles architectures de processeurs ont été publiées presque tous les jours, avec un acronyme à trois lettres – TPU, IPU, NPU. Mais qu'est-ce qui les distingue vraiment ? Y a-t-il vraiment autant d'architectures de processeurs uniques, ou quelque chose d'autre s'est-il produit ?

En 2018, John L. Hennessy et David A. Patterson ont donné une conférence à Turing intitulée « The New Golden Age of Computer Architecture ». Ils sont préoccupés par le processeur et son développement, mais ce n'est qu'une petite partie de l'équation. Le chercheur et architecte système Arteris IP Michael Frank a déclaré : « Du point de vue du processeur, la plupart de ces xPU ne sont pas de vrais processeurs. » « Ils ressemblent davantage à un GPU, un accélérateur pour des charges de travail spéciales. Et ils ont beaucoup de diversité à l'intérieur. L'apprentissage automatique est un type de processeur, vous pouvez les appeler collectivement des accélérateurs d'apprentissage automatique, mais ils accélèrent la partie traitement d'une variété de.

L'essence du processeur peut se résumer à trois choses. "En dernière analyse, cela revient à l'architecture du jeu d'instructions (ISA)", a déclaré Manuel Uhm, directeur du marketing des puces chez Xilinx. « Cela définit ce que vous voulez faire. Ensuite, vous avez les E/S et la mémoire, qui prennent en charge l'ISA et les tâches qu'il essaie d'accomplir. Ce sera une période très intéressante à l'avenir, car nous verrons plus que les deux ou trois dernières années le temps de plus d'innovation et de changement.

De nombreuses nouvelles architectures ne sont pas des processeurs uniques. "Ce que nous voyons est une combinaison de différents types de processeurs ou de moteurs programmables qui existent dans le même SoC ou le même système", a déclaré Pierre-Xavier Thomas, directeur du groupe Technologie et marketing stratégique de Cadence. « Distribuez les tâches logicielles à différents matériels ou moteurs programmables flexibles. Tous les processeurs peuvent partager une API commune, mais le domaine d'exécution sera différent. Ici, vous verrez en effet différents types de traitement avec différents types de caractéristiques.

La réalité est que la plupart des noms sont marketing.

« Le fait est que les gens utilisent ces noms et acronymes à deux fins différentes », a déclaré Simon Davidmann, PDG d'Imperas Software. « L'un sert à expliquer l'architecture du processeur, comme le SIMD (Single Instruction Multiple Data). L'autre définit le segment d'application auquel il s'adresse. Il peut donc définir l'architecture du processeur, ou quelque chose comme une unité de traitement tensoriel (TPU) Noms de marque. Ils nomment leurs architectures hétérogènes ou homogènes, pas des processeurs individuels.

Un peu d'histoire

Il y a quarante ans, les choses étaient beaucoup plus simples. À cette époque, il existait une unité centrale de traitement (CPU) et il existait de nombreuses variantes, mais il s'agissait essentiellement de processeurs complets de Turing avec une architecture von Neumann. Chacun a un jeu d'instructions différent qui les rend plus efficaces pour certaines tâches, et il y a beaucoup de discussions sur les avantages relatifs du jeu d'instructions complexe (CISC) et du jeu d'instructions réduit (RISC).

L'émergence de RISC-V a attiré beaucoup d'attention sur ISA. « Les gens veulent comprendre l'ISA parce que c'est l'ISA qui définit à quel point le processeur est optimisé pour des tâches définies », a déclaré Uhm de Xilinx. « Ils peuvent consulter l'ISA et démarrer le cycle de calcul. Si un ISA a des instructions natives et fonctionne à 1 GHz, je peux le comparer avec un autre processeur ISA, qui peut nécessiter deux instructions pour la même fonction, mais le processeur fonctionne à 1.5 GHz. Laquelle me fait aller plus loin ? Ils font des calculs mathématiques pour des fonctions importantes.

Il existe plusieurs méthodes de packaging pour les CPU. Parfois, les E/S ou la mémoire sont placés dans le même package. Ils sont appelés unités de microcontrôleur (MCU).

Lorsque les modems sont devenus populaires, les processeurs de signaux numériques (DSP) sont apparus, et leur différence était qu'ils utilisaient l'architecture Harvard. Cela sépare le bus de commande du bus de données. Certains d'entre eux ont également mis en place une architecture SIMD pour rendre le traitement des données plus efficace.

La séparation des instructions et des données vise à améliorer le débit, bien qu'elle limite certaines programmations périphériques qui peuvent être effectuées, telles que les programmes auto-écrits. "Habituellement, les conditions aux limites ne sont pas des calculs", a déclaré Uhm. « Il s'agit de plus en plus d'E/S ou de mémoire. L'industrie passe de l'augmentation de la puissance de calcul à la garantie qu'il y a suffisamment de données pour maintenir la puissance de calcul et maintenir les performances.

Lorsqu'un seul processeur ne devient plus plus rapide, ils connectent plusieurs processeurs ensemble. Ces processeurs partagent généralement la mémoire et maintiennent le concept d'exhaustivité de Turing pour chaque processeur et l'ensemble du cluster de processeurs. Peu importe sur quel noyau une partie du programme est exécutée, car le résultat est le même.

Le prochain développement majeur est l'unité de traitement graphique (GPU), qui a brisé la convention car chaque élément de traitement ou pipeline a sa propre mémoire et ne peut pas être adressé en dehors du processeur. La mémoire étant limitée, cela signifie qu'il ne peut effectuer aucune tâche de traitement arbitraire, mais ne peut effectuer que des tâches pouvant être placées dans l'espace mémoire fourni.

« Pour certains types de fonctions, les GPU sont des processeurs très puissants, mais leurs pipelines sont très longs », souligne Uhm. « Ces pipelines permettent à l'unité GPU de traiter en continu les données, mais à un moment donné, si vous devez actualiser le pipeline, ce sera un coup dur. Beaucoup de latence et d'incertitude sont intégrées au système.

Bien que de nombreux autres accélérateurs aient été définis, les GPU - et plus tard les GPU à usage général (GPGPU) - ont défini un paradigme de programmation et une pile logicielle qui les rendaient plus faciles à utiliser que les accélérateurs précédents. « Pendant de nombreuses années, certains emplois ont été spécialisés », a déclaré Davidmann d'Imperas. « Il existe un processeur pour les programmes séquentiels. Il y a un processeur graphique, qui se concentre sur le traitement des données pour l'écran et nous amène dans un monde hautement parallèle. Utilise de nombreux petits éléments de traitement pour effectuer des tâches. Maintenant, il y a des tâches d'apprentissage automatique.

Quelles autres règles de construction peuvent expliquer toute la nouvelle architecture ? Dans le passé, les baies de processeurs étaient généralement connectées via la mémoire ou des topologies de réseau fixes (telles que maillage ou anneau). Ce qui a récemment émergé, c'est la combinaison de Network on Chip (NoC), qui permet aux processeurs hétérogènes distribués de communiquer de manière plus flexible. À l'avenir, ils pourront également communiquer sans utiliser de mémoire.

"Pour le moment, NoC ne transporte que des données", a déclaré Frank d'Arteris. « À l'avenir, NoC pourra être étendu à d'autres domaines où la communication entre les accélérateurs va au-delà des données. Il peut envoyer des commandes, envoyer des notifications, etc. Les exigences de communication de la matrice d'accélérateurs peuvent être différentes des exigences de communication du CPU ou du SoC standard. Cependant, le réseau sur puce ne vous limitera pas à un sous-ensemble. Vous pouvez optimiser et améliorer les performances en prenant en charge les besoins de communication particuliers des accélérateurs.

Architecture de mise en œuvre

Une façon de différencier les processeurs consiste à optimiser pour un environnement d'exploitation spécifique. Par exemple, le logiciel peut s'exécuter dans le cloud, mais vous pouvez également exécuter le même logiciel sur des appareils micro IoT. L'architecture de mise en œuvre sera très différente et atteindra différents points de fonctionnement en termes de performances, de consommation électrique, de coût ou de capacité à fonctionner dans des conditions extrêmes.

« Certaines applications sont destinées au cloud computing, et maintenant nous les rapprochons de la périphérie », a déclaré Thomas de Cadence. « Cela peut être dû à des exigences de latence, ou à une dissipation d'énergie ou de puissance, qui nécessiteront un type d'architecture différent. Vous voudrez peut-être avoir exactement la même pile logicielle pour pouvoir fonctionner à deux endroits. Le cloud doit offrir de la flexibilité car il va recevoir différents types d'applications, et doit pouvoir agréger un grand nombre d'utilisateurs. Cela nécessite que le matériel sur le serveur ait des capacités spécifiques à l'application, mais une taille unique ne convient pas à tout le monde.

ML a augmenté ses propres exigences. « Lorsque vous utilisez des réseaux de neurones et l'apprentissage automatique pour créer des systèmes intelligents, vous devez utiliser des cadres logiciels et des piles logicielles générales pour programmer le nouveau réseau et le mapper sur le matériel », a ajouté Thomas. « Ensuite, vous pouvez adapter l'application logicielle au bon matériel du point de vue PPA. Cela entraîne le besoin de différents types de traitement et de processeurs pour pouvoir répondre à ces besoins au niveau matériel. »

Ces exigences sont définies par l'application. "Une entreprise a créé un processeur pour les opérations graphiques", a déclaré Frank. « Ils optimisent et accélèrent le suivi des graphiques et effectuent des opérations telles que la réorganisation des graphiques. Il existe d'autres forces brutes qui accélèrent l'apprentissage automatique, à savoir la multiplication matricielle. L'accès à la mémoire est différent pour chaque architecture C'est un problème particulier car lorsque vous construisez un accélérateur, l'objectif le plus important est de le garder occupé. Vous devez transférer autant de données que possible vers l'ALU car elles peuvent être consommées et produites.

Beaucoup de ces applications ont beaucoup en commun. "Ils ont tous de la mémoire locale, ils ont un réseau sur une puce pour communiquer, et chaque processeur qui exécute un algorithme logiciel traite un petit morceau de données", a déclaré Davidmann. "Ces tâches sont planifiées par des systèmes d'exploitation s'exécutant sur des processeurs plus traditionnels."

La partie délicate pour les concepteurs de matériel est de prédire les tâches qu'ils devront effectuer. "Bien que vous effectuerez des types d'opérations similaires dans certaines couches, les gens font attention à la différenciation dans les couches", a déclaré Thomas. « Afin de pouvoir traiter un réseau de neurones, plusieurs types de puissance de traitement sont nécessaires. Cela signifie que vous devez être capable de traiter une partie du réseau neuronal d'une manière ou d'une autre, puis vous aurez peut-être besoin d'un autre type d'opération pour traiter une autre couche. Mouvement des données Et la quantité de données change également couche par couche.

Cette différenciation peut aller au-delà du mouvement de données. "Pour le séquençage du génome, vous devez effectuer un certain traitement", a déclaré Frank. « Mais vous ne pouvez pas utiliser un seul type d'accélérateur pour tout accélérer. Vous devez créer un ensemble complet d'accélérateurs différents pour différents pipelines. Le CPU devient le gardien du processus d'exécution de la gestion. Il met en place, exécute le DMA et fournit la prise de décision entre les deux processus. Comprendre et analyser les algorithmes et définir comment vous souhaitez optimiser leur traitement est une tâche architecturale complète.

Une partie du processus nécessite un partitionnement. "Il n'y a pas de type de processeur unique qui puisse être optimisé pour chaque tâche de processeur - le FPGA n'est pas bon, le CPU n'est pas bon, le GPU n'est pas bon, le DSP est également nécessaire", a déclaré Uhm. « Nous avons créé une série d'appareils qui contiennent tout cela, mais la partie difficile du côté client est qu'ils doivent fournir des informations pour déterminer quelles parties du système global seront ciblées sur le processeur ou la logique programmable, ou dans l'IA. moteur. Tout le monde veut cet outil magique automatique, un outil qui peut immédiatement décider de le mettre sur le CPU, le mettre sur le FPGA et le mettre sur le GPU. Cet outil n'existe pas aujourd'hui.

Néanmoins, le CPU jouera toujours un rôle. "Le processeur est nécessaire pour exécuter des parties irrégulières du programme", a déclaré Frank. « La programmabilité générale du CPU a ses avantages. Si vous avez des structures de données spécialisées ou des opérations mathématiques, cela ne fonctionnera pas bien. Le CPU est un processeur à usage général et il n'est optimisé pour rien. Il n'est bon à rien.

Changer « résumé »

Dans le passé, la frontière matériel/logiciel était définie par l'ISA et la mémoire était adressable en continu. Lorsqu'il y a plusieurs processeurs, ils sont généralement alignés sur la mémoire.

"La cohérence est un contrat", a déclaré Frank. « Ce genre de cohérence est très important et ne disparaîtra pas. Mais vous pouvez imaginer que dans un moteur de flux de données, la cohérence n'est pas si importante, car vous transférez les données se déplaçant à la périphérie directement d'un accélérateur à un autre. Si vous partitionnez l'ensemble de données, la cohérence deviendra un obstacle car cela vous coûtera des cycles supplémentaires. Vous devez vérifier les informations. Vous devez fournir des informations à jour.

Cela nécessite une architecture de mémoire différente. "Vous devez penser à la structure de la mémoire, car vous n'avez qu'une quantité limitée de mémoire étroitement couplée", a déclaré Uhm. « Vous pouvez accéder à la mémoire adjacente, mais vous manquerez rapidement de mémoire adjacente et vous ne pourrez pas y accéder à temps. Cela doit être compris dans la conception. Au fur et à mesure que l'outil mûrit, l'outil commencera à en apprendre davantage. Aujourd'hui, c'est l'intelligence humaine qui le fait, capable de comprendre l'architecture et de l'appliquer.

Un niveau d'abstraction plus élevé est également nécessaire. "Certains frameworks peuvent cartographier ou compiler des réseaux connus pour cibler le matériel", a déclaré Thomas. « Vous disposez d'un ensemble de noyaux ou d'API de bas niveau qui seront utilisés dans la pile logicielle, puis éventuellement utilisés par le mappeur du réseau de neurones. Ci-dessous, vous pouvez avoir différents types de matériel, en fonction de ce que vous souhaitez réaliser, en fonction des détails de votre produit. Il atteint les mêmes fonctionnalités, mais il n'utilise pas le même matériel ni les mêmes compromis PPA.

Cela met beaucoup de pression sur ces compilateurs. « La principale question est de savoir comment programmer l'accélérateur à l'avenir ? » a demandé Frank. « Avez-vous mis en place un moteur câblé comme la première génération de GPU ? Ou avez-vous construit un petit moteur programmable avec votre propre jeu d'instructions ? Maintenant, vous devez programmer ces éléments séparément et les mettre dans chacun d'eux est connecté au flux de données pour effectuer des tâches. Un processeur a un certain sous-ensemble de l'ensemble d'instructions et l'autre processeur a un sous-ensemble différent, et ils partageront tous certaines parties se chevauchant du flux de contrôle. Certains Produits peuvent avoir des capacités d'accélération légèrement différentes. Le compilateur ou les bibliothèques qui le comprennent seront mappés en conséquence.

Résumer

L'architecture du processeur n'a pas changé. Ils suivent toujours les mêmes choix qui existent depuis 40 ans. Ce qui change, c'est la façon dont la puce est construite. Ils contiennent désormais un grand nombre de processeurs hétérogènes avec une mémoire et des communications optimisées pour un sous-ensemble de tâches applicatives. Chaque puce fait un choix différent pour la fonction du processeur et son objectif d'optimisation, le débit de données requis et le flux de données qu'elle voit généralement.

Chaque fournisseur de matériel souhaite distinguer sa propre puce des autres puces, mais il est beaucoup plus facile de faire la promotion par le biais de la marque que de parler de détails techniques internes. Ils lui ont donc donné un nom, l'ont appelé le premier, le plus rapide et le plus grand, et l'ont lié à des types spécifiques de problèmes d'application. Ces acronymes à trois lettres sont devenus des noms de tâches d'application, mais ils ne définissent pas l'architecture matérielle.