En OpenCL, ma compréhension est que vous pouvez utiliser l' barrier()
fonction pour synchroniser les threads dans un groupe de travail. Je n' (en général), comprendre ce qu'ils sont et quand les utiliser. Je suis également conscient que tous les threads d'un groupe de travail doit frapper la barrière, sinon il y a des problèmes. Cependant, chaque fois que j'ai essayé d'utiliser les obstacles jusqu'à présent, il semble résulter soit de mon pilote vidéo panne, ou un message d'erreur sur l'accès à la mémoire non valide d'une certaine sorte. J'ai vu cela sur 2 différentes cartes vidéo jusqu'à présent (1 ATI, 1 NVIDIA).
Donc, mes questions sont les suivantes:
- Aucune idée de pourquoi cela arriverait?
- Quelle est la différence entre
barrier(CLK_LOCAL_MEM_FENCE)
etbarrier(CLK_GLOBAL_MEM_FENCE)
? J'ai lu la documentation, mais il n'était pas clair pour moi. - Est-il de la règle générale sur l'utilisation de
barrier(CLK_LOCAL_MEM_FENCE)
vsbarrier(CLK_GLOBAL_MEM_FENCE)
? - Est-il jamais un temps que la convocation
barrier()
avec le mauvais type de paramètre peut causer une erreur?