CUDA: Appel d'un __device__ fonction à partir d'un noyau
J'ai un noyau qui appelle une appareil fonction à l'intérieur d'une instruction if. Le code est comme suit:
__device__ void SetValues(int *ptr,int id)
{
if(ptr[threadIdx.x]==id) //question related to here
ptr[threadIdx.x]++;
}
__global__ void Kernel(int *ptr)
{
if(threadIdx.x<2)
SetValues(ptr,threadIdx.x);
}
Dans les threads du noyau 0-1 appel SetValues simultanément. Ce qui se passe après qui? Je veux dire il y a maintenant 2 appels simultanés à la SetValues. Est-ce que chaque appel de la fonction exécuter en série? Donc, ils se comportent comme des 2 noyau appels de fonction?
Vous devez vous connecter pour publier un commentaire.
CUDA fait inlines toutes les fonctions par défaut (bien que Fermi et plus récents, les architectures ne prennent également en charge une bonne ABI avec des pointeurs de fonction et réel les appels de fonction). Donc ton exemple de code sera compilé à quelque chose comme ceci
Exécution qui se passe en parallèle, comme les code. Si vous avez un ingénieur de la mémoire de la race dans une fonction, il n'existe pas de mécanisme de sérialisation qui peut vous sauver.