Pourquoi les ordinateurs ne sont-ils pas fournis avec du matériel spécialisé tel que les réseaux de tri?

10

Au lieu de programmer comme nous le faisons, pourquoi ne faisons-nous pas de spécifications de tâches courantes telles que le "tri", puis laissons-nous l'environnement le compiler pour utiliser au mieux son matériel? De cette façon, nous pourrions expédier un ordinateur avec un nouveau matériel spécialisé tel que des réseaux de tri, et cela fonctionnerait automatiquement avec le code existant.

MaiaVictor
la source
2
Achetez une carte PCI FPGA et implémentez les extensions dont vous avez envie.
SK-logic
Le matériel n'est pas magique. Beaucoup de choses ne peuvent pas être accélérées beaucoup (ou pas du tout) par du matériel spécialisé, et même si c'est le cas, le matériel existant doit souvent être adapté (ou du moins recompilé). Voir yosefk.com/blog/its-done-in-hardware-so-its-cheap.html
3
@WorldEngineer Je ne vois pas comment cela entre dans l'image. Votre utilisateur moyen ne sait pas à quoi servent 80% des choses dans un processeur moderne, il est content car on lui dit que cela rend leurs programmes plus rapides (et cela a un noyau de vérité). Si le tri était en effet aussi courant que le suppose OP et pouvait être optimisé par du matériel dédié, ils le placeraient à côté du prédicteur de branche ("qu'est-ce que c'est, le jardinage?"), Publient un communiqué de presse disant qu'ils ont fait des applications X et Y 5% plus vite, et le vendre.
1
Cela me rappelle l'idée des cœurs de conservation , qui sont ciblés pour l'efficacité énergétique plutôt que pour les performances de pointe.
Paul A. Clayton

Réponses:

19

Tout d'abord, les ordinateurs sont livrés avec du matériel spécialisé . Chaque ordinateur portable et de bureau vendu depuis quelques années dispose désormais d'un coprocesseur spécialisé, une unité de traitement graphique, qui gère les algorithmes de traitement visuel, tels que les applications vidéo et de jeu l'exigent. Très gros ordinateurs ( par exemple , « supercalculateurs », IBM System famille Z) ont une variété de processeurs spécialisés pour gérer le traitement numérique ( « traitement vectoriel »), etc .

Deuxièmement, le tri est l'un des aspects les plus étudiés de l'informatique et s'avère beaucoup trop complexe pour être intégré dans du matériel pour plus que les cas les plus simples. Le tri est une question de vitesse et d'exactitude. La vitesse dépend du choix de l'algorithme, du type et de la variation des données et du volume de données. L'exactitude dépend du type et du contexte des données. Il est très trivial de trier un tableau d'entiers de taille moyenne qui tiennent dans la taille du mot natif du processeur ( par exemple, 31 ou 63 bits plus signe). Le tri des chaînes de caractères qui contiennent plus que de simples valeurs ASCII est extrêmement complexe - IBM a publié il y a plus de 20 ans un livre de plus de 500 pages sur les problèmes des jeux de caractères dans le contexte des frontières nationales et de l'usage courant. Et puis, il y a la question des données non contiguës - le tri d'une liste chaînée implique de rechercher des pointeurs sur toute la mémoire.

Ross Patterson
la source
10

Le problème principal est que les algorithmes de tri (1) ont besoin de beaucoup de flexibilité et (2) seraient de toute façon très difficiles à accélérer en utilisant du matériel.

Une chose est que les algorithmes de tri sont déjà assez rapides pour dépasser la bande passante mémoire du processeur - le processeur passera déjà une grande partie de son temps à attendre que les données se déplacent en arrière et en avant vers la mémoire principale. Un coprocesseur de tri accéléré par matériel ou une instruction de tri spéciale aurait le même problème.

La façon dont cette bande passante mémoire est traitée consiste à utiliser de meilleurs algorithmes et des structures de données qui ont une meilleure «localité», et il y a encore un travail important à faire dans ce domaine, en particulier les «algorithmes inconscients du cache» (ils sont inconscients dans le sens où ils fonctionnent). bien quels que soient les détails de la mise en cache, alors que les algorithmes "sensibles au cache" sont réglés pour une taille de page de cache particulière, etc.).

En revanche, les applications multimédias (audio et graphiques, en particulier les graphiques 3D) utilisent des structures très répétitives - bien sûr, il y a de la flexibilité, mais elles sont construites sur une base large et très bien structurée. Cela a permis à l'accélération graphique de commencer simplement avec des choses comme Blitting (une opération de copie de bloc configurable mais toujours très structurée) et le dessin de ligne / polygone. Cela signifiait que les graphiques et le traitement du son devenant plus sophistiqués, les opérations vectorielles devinrent une cible évidente pour l'optimisation - d'abord MMX (vecteurs d'entiers) puis SSE (vecteurs de flottants). Cela signifiait qu'il y avait une structure assez bien définie pour le fonctionnement d'un moteur graphique 3D lorsque l'ancien pipeline de graphiques 3D à fonction fixe a été déplacé sur du matériel graphique 3D.

Pourtant, avec les graphiques 3D, ce qui était autrefois fait dans le matériel l'est maintenant dans le logiciel pour plus de flexibilité - les shaders sont des logiciels, par exemple, c'est ainsi que nous obtenons une vaste gamme de shaders différents donnant l'apparence de différents matériaux. Cependant, ce logiciel fonctionne toujours de manière beaucoup plus structurée que les logiciels généraux, et peut donc toujours utiliser une plate-forme matérielle beaucoup plus spécialisée. C'est pourquoi votre carte graphique peut désormais tout accélérer, de la physique au cracking des mots de passe - des applications qui correspondent également au même modèle et peuvent être mises en œuvre efficacement à l'aide des jeux d'instructions fournis par les processeurs graphiques modernes.

Les processeurs graphiques sont maintenant les descendants spirituels ou réels des processeurs de signaux numériques, qui étaient (et sont probablement toujours) une sorte de processeur spécialisé pour traiter les signaux numériques (par exemple audio).

Ce qui conduit à un point final - les algorithmes de tri peuvent être accélérés par le matériel. Selon vos données, le tri peut être géré à l'aide d'instructions MMX ou SSE (single-instruction-multiple-data) sur votre processeur, mais il n'y a probablement pas grand-chose à cause du problème de bande passante mémoire - peut-être pouvez-vous être un peu plus économe en énergie de cette façon, cependant. Cependant, vous pouvez également utiliser votre matériel graphique. De cette façon, vous pouvez bénéficier d'une bande passante mémoire souvent bien meilleure pour les cartes graphiques. Vous ne pourrez pas remplacer toutes sortes de cette façon, mais c'est certainement possible et probablement fait le cas échéant.

IOW en raison des divers problèmes économiques et pratiques, concevoir du matériel spécifiquement pour accélérer une tâche relativement étroite comme le tri n'a pas vraiment de sens. Une fonctionnalité qui accélère une gamme plus large de tâches ou qui rend le matériel d'accélération existant applicable à une gamme plus large de tâches a souvent beaucoup plus de sens.

Steve314
la source
3

Mais ils le font! On les appelle des extensions de jeu d'instructions. (Des trucs comme SSE et similaires)

Certaines tâches ont de très belles implémentations dans les logiciels. Habituellement, ces implémentations sont assez bonnes pour faire le travail, donc aucun matériel spécialisé n'est nécessaire. Si vous voulez créer une sorte de matériel spécialisé, vous aurez besoin d'avoir une très large gamme d'applications pour que cela en vaille la peine.

Si vous regardez le matériel qui pourrait faire fonctionner cela, je suppose que vous regarderiez quelque chose comme des FPGA. Comme vous pouvez le voir avec les FPGA, la puce deviendrait beaucoup plus chère alors qu'elle ne serait pas applicable à de nombreuses applications.

Onno
la source
Je vais devoir google pour SSE, mais, à l'avance, le tri est probablement universel. Est-il implémenté au niveau matériel?
MaiaVictor
Eh aussi, comme nous y sommes, recommanderiez-vous des livres?
MaiaVictor
Je parlais simplement des optimisations spécifiques au travail en cours d'implémentation sur les processeurs de style CPU en général, car les réseaux de tri sont utilisés à titre d'exemple. Je ne sais pas si SSE ou tout autre jeu d'instructions inclut le tri d'optimisations spécifiques. J'ai fait des réseaux de tri Google, et comme il existe des implémentations générales optimisées, je pense que les implémentations logicielles pourraient tout aussi bien faire le travail si l'implémentation est bien faite.
Onno
Je dois souligner que la plupart des extensions de jeu d'instructions fonctionnent à un niveau inférieur à celui du réseau de tri que vous avez utilisé comme exemple, mais il n'est pas impossible de concevoir une optimisation multi-registres qui puisse faire le tri de cette façon. Mais la question pour les fabricants de CPU serait: "cela rapporterait-il suffisamment pour justifier le coût?".
Onno