CUDA: Combien de threads simultanés au total?
J'ai une GeForce GTX 580, et je tiens à faire une déclaration sur le nombre total de threads qui peuvent (dans l'idéal), en fait exécuter en parallèle, à comparer avec 2 ou 4 CPU multi-coeurs.
deviceQuery donne-moi la suite, éventuellement, des informations pertinentes:
CUDA Capability Major/Minor version number: 2.0
(16) Multiprocessors x (32) CUDA Cores/MP: 512 CUDA
Maximum number of threads per block: 1024
Je pense que j'ai entendu dire que chaque CUDA core pouvez exécuter une chaine en parallèle, et qu'une chaine est de 32 threads. Serait-il correct de dire que la carte peut fonctionner 512*32 = 16384 threads en parallèle, ou suis-je et le CUDA cores sont en quelque sorte pas vraiment en parallèle?
- Afin de s'appuyer sur @CygnusX1 dit, n'oubliez pas que SIMD est de 128 (et maintenant de 256 bits de large. Donc, pour la simple précision, on pourrait dire que 1 CPU core ressemble à 8 GPU de base, faire une 10-core CPU ressembler à un 80 core du GPU. Notez que l'Hyperthreading ne pas profiter de SIMD sur les deux fils. Ensuite, nous devons tenir compte de la vitesse d'horloge et de travail par l'horloge de l'avantage de la CPU de base. Donc, la seule façon de mesurer la performance relative est avec une charge de travail.
- gamedev.stackexchange.com/questions/17243/...
Vous devez vous connecter pour publier un commentaire.
La GTX 580 pouvez avoir 16 * 48 simultanées de funes (32 fils de chaque) en cours d'exécution à la fois. C'est-à 16 multiprocesseurs (SMs) * 48 résident chaînes par SM * 32 threads par warp = 24,576 threads.
Ne pas confondre, de simultanéité et de débit. Le nombre ci-dessus est le nombre maximal de threads dont les ressources peuvent être stockées sur la puce simultanément -- le nombre qui peut être résident. Dans CUDA termes, nous faisons également appel à ce maximum occupation. Le matériel bascule entre les déforme en permanence pour aider à couvrir ou de "cacher" le (grand) temps de latence d'accès à la mémoire ainsi que le (petit) temps de latence de l'arithmétique des pipelines.
Alors que chaque SM peut avoir 48 résident de funes, il ne peut donner des instructions à partir d'un petit nombre (en moyenne entre 1 et 2 pour les GTX 580, mais cela dépend du programme d'instruction de mélange) de la chaîne à chaque cycle d'horloge.
Alors vous êtes probablement mieux de comparer le débit, qui est déterminée par la disposition des unités d'exécution et la façon dont le matériel est capable d'effectuer multi-problème. Sur GTX580, il y a 512 FMA unités d'exécution, mais aussi nombre entier de parts, la fonction spéciale d'unités de mémoire unités d'enseignement, etc, qui peut être à double émis (par exemple, problème indépendant instructions à partir de 2 chaînes simultanément) dans diverses combinaisons.
En tenant compte de tous les ci-dessus est trop difficile, cependant, de sorte que la plupart des gens comparer deux indicateurs:
La comparaison la plus importante est toujours mesurée à l'horloge murale sur une application réelle.
Il y a certains pièges que vous pouvez tomber en en faisant la comparaison de 2 ou 4 Processeurs core:
Le nombre de threads simultanés ne correspond pas au nombre de threads qui fait exécuter en parallèle. Bien sûr, vous pouvez lancer 24576 threads simultanément sur la GTX 580, mais la valeur optimale est dans la plupart des cas inférieur.
Un 2 ou un 4-core CPU peut avoir arbitraire nombre de threads simultanés! De la même manière qu'avec les GPU, à partir d'un certain moment ajouter d'autres threads ne va pas aider, ou même il peut ralentir.
Un "CUDA core" est un scalaire unique unité de traitement, alors que les processeurs core est généralement un plus grand chose, contenant par exemple un 4 de l'échelle de l'unité SIMD. Pour comparer des pommes avec des pommes, vous devez multiplier le nombre de processus annoncés cœurs de PROCESSEUR par 4 pour correspondre à ce que NVIDIA appelle un noyau.
CPU supporte l'hyperthreading, qui permet à une seule base de processus 2 threads simultanément dans un chemin de lumière. À cause de cela, un système d'exploitation peut effectivement voir 2 fois plus de "logique cœurs" que le matériel cœurs.
Pour résumer: Pour une comparaison équitable, votre 4-core CPU peut exécuter 32 "scalaire threads simultanément, en raison de SIMD et l'hyperthreading.
Je réalise que c'est un peu tard, mais j'ai pensé que je voudrais l'aider de toute façon. À partir de la page 10 le CUDA Fermi architecture tutorial:
Pour moi, cela signifie que signifie que chaque SM peut avoir 2*32=64 threads qui s'exécutent simultanément. Je ne sais pas si cela signifie que le GPU peut avoir un total de 16*64=1024 threads qui s'exécutent simultanément.