CUDA: Aufruf einer Funktion __device__ von einem Kernel
Habe ich einen kernel, der ruft eine Gerät Funktion innerhalb einer if-Anweisung. Der code ist wie folgt:
__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);
}
In der kernel-threads 0-1 nennen SetValues gleichzeitig. Was passiert danach? Ich meine, es sind nun 2 gleichzeitige Anrufe zu SetValues. Jeder Funktionsaufruf ausführen Seriell? So Verhalten Sie sich wie 2 kernel-Funktion Aufrufe?
InformationsquelleAutor der Frage scatman | 2011-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
CUDA eigentlich inlines alle Funktionen standardmäßig (obwohl Fermi und neuere Architekturen auch die Unterstützung einer richtigen ABI mit Funktionszeigern und echte Funktionsaufrufe). Also dein Beispiel-code wird kompiliert, um so etwas
Ausführung geschieht parallel, genauso wie die normalen code. Wenn Sie Ingenieur ein Speicher-Rennen in einer Funktion, es gibt keine Serialisierungs-Mechanismus, der Sie retten kann.
InformationsquelleAutor der Antwort talonmies