Nombre d'Unités de Calcul correspondant au nombre de groupes de travail
J'ai besoin de quelques éclaircissements. Je suis le développement de OpenCL sur mon ordinateur portable exécutant un petit GPU nvidia (310M). Quand j'ai une requête de l'appareil, pour CL_DEVICE_MAX_COMPUTE_UNITS
, le résultat est 2. J'ai lu le nombre de groupes de travail pour l'exécution d'un noyau devrait correspondre au nombre d'unités de calcul (Caractère hétérogène de l'Informatique avec OpenCL, Chapitre 9, p. 186), sinon, il serait de perdre trop de mémoire globale bande passante.
Aussi la puce est spécifiée pour avoir 16 cuda cores (qui correspondent à PEs, je crois). Est-ce à dire que, théoriquement, le plus performant de l'installation de ce gpu, concernant la mémoire globale de la bande passante, c'est d'avoir deux groupes de travail avec les 16 éléments de travail de chacun?
OriginalL'auteur rdoubleui | 2012-02-17
Vous devez vous connecter pour publier un commentaire.
Tout en fixant le nombre de groupes de travail pour être égale à
CL_DEVICE_MAX_COMPUTE_UNITS
peut-être son avis sur certains matériels, il est certainement n'est pas sur des Gpu NVIDIA.Sur l'architecture CUDA, OpenCL unité de calcul est l'équivalent d'un multiprocesseur (qui peut avoir soit 8, 32 ou 48 cœurs), et ils sont conçus pour être en mesure de simultanesouly exécuter jusqu'à 8 groupes de travail (blocs dans CUDA) chaque. En plus des données d'entrée tailles, vous pouvez choisir de lancer des milliers de groupes de travail et de votre GPU peut gérer jusqu'à 65 535 x 65535 des groupes de travail par le noyau de lancement.
OpenCL a un autre attribut du dispositif de
CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE
. Si vous interroger que sur une NVIDIA appareil, il sera de retour 32 (c'est le "warp", ou naturel SIMD largeur du matériel). Cette valeur est le travail de la taille des groupes multiples, vous devez utiliser; groupe de travail de tailles peut être jusqu'à 512 éléments de chacun, en fonction des ressources consommées par chaque élément de travail. La norme de la règle de pouce pour votre GPU est que vous avez besoin d'au moins 192 actif, des éléments de travail par unité de calcul (threads par multiprocesseur dans CUDA) pour couvrir tous les temps de latence de l'architecture et potentiellement obtenir la pleine bande passante de la mémoire ou complète de l'arithmétique de débit, selon la nature de votre code.NVIDIA navire un bon document intitulé "Guide de Programmation OpenCL pour le CUDA de l'Architecture" dans le CUDA toolkit. Vous devriez prendre le temps de le lire, car il contient tous les détails de la façon dont la NVIDIA OpenCL la mise en œuvre des cartes sur les caractéristiques de leur matériel, et il va répondre aux questions que vous avez soulevées ici.
OriginalL'auteur talonmies
Je ne pense même pas correspondant à votre groupe de travail de comptage d'unités de calcul est une bonne idée sur un CPU. Il est préférable de surévaluer les carottes en plusieurs fois. Cela permet à la charge de travail pour se déplacer de manière dynamique (en groupe de travail quanta) que les différents processeurs venir sur la ligne ou se laisser distraire par d'autres tâches. Groupe de travail
count = CL_DEVICE_MAX_COMPUTE_UNITS
ne fonctionne vraiment bien sur une machine qui ne fait absolument rien d'autre et de perdre beaucoup d'énergie en gardant inutilisés cœurs éveillés.OriginalL'auteur Ian Ollmann