Combien de threads (ou d'éléments de travail) peuvent s'exécuter en même temps?
Je suis nouveau dans la programmation GPGPU et je suis en train de travailler avec NVIDIA mise en œuvre d'OpenCL.
Ma question était de savoir comment calculer la limite d'un GPU de l'appareil (en nombre de threads).
De ce que j'ai compris il y a un certain nombre de travail-groupe de (l'équivalent de blocs dans CUDA) qui contiennent un certain nombre d'éléments de travail (~ cuda thread).
- Comment puis-je obtenir le numéro de travail-groupe présent sur ma carte (et qui peuvent s'exécuter en même temps) et le nombre de travail-élément présent sur un travail de groupe?
- À ce que CL_DEVICE_MAX_COMPUTE_UNITS correspond?
Le khronos spécification speeks de cœurs ("Le nombre de cœurs de calcul parallèle sur la Prise de l'appareil.") quelle est la différence avec le CUDA core donnée dans la spécification de ma carte graphique. Dans mon cas, openCL donne 14 et ma GeForce 8800 GT a 112 core basé sur le site web de NVIDIA. - Ne CL_DEVICE_MAX_WORK_GROUP_SIZE (512 dans mon cas) correspond à la somme de travail, les objets donnés à un travail de groupe ou le nombre d'éléments de travail qui peuvent s'exécuter en même temps dans un travail de groupe?
Toutes les suggestions seront très appréciés.
source d'informationauteur Laure Jonchery
Vous devez vous connecter pour publier un commentaire.
L'OpenCL norme ne précise pas comment l'abstrait modèle d'exécution fournis par OpenCL est mappé sur le matériel. Vous pouvez mettre en file d'attente tout nombre T de threads (les éléments de travail), et de fournir un groupe de travail-taille (WG), avec au moins les contraintes suivantes (voir OpenCL spec 5.7.3 et de 5,8 pour plus de détails):
DEVICE_MAX_WORK_GROUP_SIZE
KERNEL_WORK_GROUP_SIZE
retourné parGetKernelWorkGroupInfo
; elle peut être plus petite que l'appareil max groupe de travail de taille si le noyau consomme beaucoup de ressources.La mise en œuvre gère l'exécution du noyau sur le matériel. Tous les threads d'un seul groupe de travail doit être prévue sur un seul "multiprocesseur", mais un seul multiprocesseur peut gérer plusieurs groupes de travail en même temps.
Threads à l'intérieur d'un groupe de travail sont exécutées par des groupes de 32 (NVIDIA courbure) ou 64 (AMD front d'onde). Chaque micro-architecture ne présente d'une manière différente. Vous trouverez plus de détails dans NVIDIA et AMD forums, et dans les différentes docs fournis par chaque fournisseur.
Pour répondre à votre question: il n'y a pas de limite pour le nombre de threads. Dans le monde réel, votre problème est limité par la taille des entrées/sorties, c'est à dire la taille de la mémoire de l'appareil. Pour traiter les 4 go de mémoire tampon de flotteur, vous pouvez mettre en file d'attente 1G fils, avec le GT=256 par exemple. Le dispositif aura pour planifier 4M groupes de travail de son petit nombre (disons entre 2 et 40) des multiprocesseurs.