web-dev-qa-db-fra.com

Quelle est la différence entre le cœur CUDA et le cœur CPU?

J'ai un peu travaillé avec CUDA, et beaucoup avec le CPU, et j'essaie de comprendre quelle est la différence entre les deux. Mon processeur I5 a 4 cœurs et coûte 200 $ et mon NVidia 660 a 960 cœurs et coûte environ le même prix.

Je serais vraiment heureux si quelqu'un pouvait expliquer quelles sont les principales différences entre l'architecture des deux unités de traitement en termes d'avantages et d'inconvénients. Par exemple, un noyau CUDA a-t-il une prédiction de branche?

24
OopsUser

C'est une question d'architecture informatique qui nécessite une longue réponse. Je vais essayer de rester très simple sur le risque d'être inexact. Vous avez essentiellement répondu vous-même à votre question en demandant à CUDA de gérer la prédiction des branches, la réponse est NON. Un cœur de processeur doit gérer chaque opération unique d'un ordinateur, le calcul, la récupération de la mémoire, les E/S, les interruptions, il a donc un ensemble d'instructions complexe énorme et pour optimiser la vitesse de récupération, la prédiction de branche d'instructions est utilisée.
Il a également un grand cache et une fréquence d'horloge rapide. Pour implémenter le jeu d'instructions, vous avez besoin de plus de logique donc plus de transistors plus de coût par cœur par rapport au GPU.

Les cœurs GPU ont moins de mémoire cache, des instructions plus simples et moins de fréquence d'horloge par horloge, mais ils sont optimisés pour faire plus de calculs en tant que groupe. Le jeu d'instructions simples, le moins de mémoire cache les rendent moins chers par cœur.

9
Nadim Farhat

Les noyaux Cuda sont davantage des voies d'une unité vectorielle, regroupées en chaînes. En substance, les cœurs sont des entrées dans un vecteur AVX ou VSX ou NEON plus large.

Le plus proche d'un cœur de processeur est un SMX. Il peut gérer plusieurs contextes (warps, hyper threading, SMT) et dispose de plusieurs pipelines d'exécution parallèles (6 FP32 pour Kepler, 2 sur Haswell, 2 sur Power 8). Et chaque SMX est indépendant, tout comme n'importe quel cœur ou CPU à usage général.

Cette analogie est détaillée plus loin ici: https://stackoverflow.com/a/36812922/62183 .

6
Florent DUGUET

Ils sont désormais en principe les mêmes que les cœurs CPU. Il n'y a pas si longtemps, ce n'était pas vrai, par exemple, ils n'ont pas pu traiter les opérandes entiers en 2005.

Lorsque vous comparez la complexité du noyau du processeur de votre i5 à 2 cœurs, gardez à l'esprit que le processeur 80386 d'origine avait à peu près 275 k transistors alors qu'un Core2Duo en avait environ 230 millions. 1000 fois plus, donc les chiffres vont bien.

La plus grande différence est la gestion de la mémoire qui devient encore plus compliquée que le bon vieux temps où nous avons besoin de registres de segmentation. Il n'y a pas de mémoire virtuelle, etc. et c'est le goulot d'étranglement très mince lorsque vous essayez de porter vos programmes CPU normaux, mais le vrai problème est que l'accès à la mémoire non locale coûte très cher 400 à 800 cycles. Ils utilisent une technique que, en dehors du monde des GPU, seul le CPU à usage général Sun Niagara T1/T2 possédait. En attendant un accès à la mémoire, ils planifient différents ensembles de threads avec d'autres instructions prêtes (appelées wraps). Mais si tous les threads font un saut non linéaire autour de vos données, vos performances échouent.

4
Lothar

Vous devez comprendre la différence fondamentale entre le GPU CPU Vs et le besoin de montée en puissance du GPGPU ces derniers temps. L'un des cours d'information à ce sujet est disponible en dacity

En outre, ce livre pourrait être utile pour les programmes de niveau débutant.

Bien que ce ne soit pas une question de programmation. J'espère que cela pourrait aider quelqu'un.

3
Itachi