Groupe De Travail Sur Les Tailles
Pour un Noyau, pourquoi work_groups de toujours la même taille?
J'ai lu quelque part (dans le cas où l'on ne spécifie pas le travail local en taille) que openCL crée des 3 groupes de travail(de 217 travail-éléments de chaque) pour le noyau avec 651 travail-éléments(divisible par 3), tandis qu'il crée 653 les groupes de travail de 1 élément de travail de chacun, comme 653 est un nombre premier.
Supposons que nous préciser le local_work_size(c'est à dire aucun. de travail-éléments dans un travail de groupe), disons,5. Et nous avons donné le travail total-éléments(global_work_size) 9. Comment les groupes de travail seront créés? est-ce la raison de la global_work_size doit être un multiple de local_work_size? Si les données ne nécessite qu'9 travail-éléments, comment puis-je passer à 10(multiple de local_work_size,5)?
Pourquoi ne peut-hôte allouer de la mémoire pour le tableau résultat si il ne sait pas combien de groupes de travail va exécuter le noyau?
S'il vous plaît aider.
J'ai lu tout ceci, sur cela:
http://www.openclblog.com/2011/09/work-group-sizes.html
OriginalL'auteur Remy | 2012-07-13
Vous devez vous connecter pour publier un commentaire.
OpenCL Travail des tailles de groupes qui n'ont pas besoin d'être toujours la même taille. Le travail Global de la taille du groupe est souvent lié à la taille du problème. Le Groupe de Travail Local Taille est sélectionné basée sur la maximisation de l'Unité de Calcul du débit et le nombre de threads qui ont besoin de partager de la Mémoire Locale.
Prenons quelques exemples;
A) à l'Échelle d'une image de N par M de X par Y.
B) la Somme de N nombres.
Pour Une)
L'évidence de Travail Globale de la Taille du Groupe est de X ,Y, 1. Pourquoi? Cela donne 1 thread par sur pixel.
Le Groupe de Travail Local de Taille doivent être choisies en fonction du nombre de pixels qui doivent être traitées pour générer une sortie de pixel.
Par exemple.
A. 1)à l'Échelle une image de 4 par 3.2 K à 64 par 64. GWG Taille [64,64,1] LWG Taille 256
A. 2)à l'Échelle une image de 4 par 3.2 k à 800 par 600.GWG Taille [800,60,1] LWG Taille 256
B)
L'évidence de Travail Globale de la Taille du Groupe est N/2,1,1, Pourquoi? De sorte que chaque thread commence par la somme de 2 valeurs. Le Groupe de Travail Local doit être fixé à l'appareil max.
Il y a quelques mises en garde;
1) de Travail Globale de la Taille du Groupe est limitée par la Mémoire Globale de la Taille et de la Max Global de l'Allocation de Mémoire de taille.
2) Chaque appareil a un max le groupe de Travail Local de taille souvent 256
Afin de clarifier oui confiées au groupe de travail de la taille doit être un mukltiple ou une valeur null. Depuis les pages de manuel de khronos.org/registry/cl/sdk/1.1/docs/man/xhtml
Depuis le GWG taille est liée à la taille du problème (en supposant que dans la correspondance de modèle, je le prends (Length_of_text)-(Length_of_pattern)) Et je prends confiées au groupe de travail de taille comme Length_of_pattern(1 seul mot). Mais SI le GWG la taille n'est pas un multiple de LWG,et depuis, il doit être un multiple, je ne peux pas prendre confiées au groupe de travail à Length_of_pattern.Comment dois-je passer de la le Modèle dans les __Local?
Vous ne pouvez pas passer dans les données __local. Vous pouvez transmettre des données mondiaux et ont certains threads copier en local. Si le GWG taille n'est pas un multiple confiées au groupe de travail de la taille, faire du multiple et de passer dans une constante qui est le problème de la taille ou le nombre de threads par exemple. passer en N que les constantes de type int et le test if ( N< get_global_id(0) ) ...
Si le motif est immuable ( ne pas changer) au cours de l'exécution du noyau que vous pourrait passer comme un argument constant . Généralement, son plus rapide sur un GPU.
OriginalL'auteur Tim Child