Ich setze meine Erkundung bei der Verwendung von CUDA fort und stehe vor einem Problem mit Kernel. Ich rufe einen Kernel in einem anderen Kernel an und möchte schon vor dem Abschluss warten, um im übergeordneten Kernel fortzufahren. < /P>
Hier ist der Beispielcode.#include
__global__ void cmp_int(int const* a, int const* b, int* cmp)
{
printf("cmp_int cmp %d\n", *cmp);
if (*a == *b)
*cmp = 0;
else if (*a < *b)
*cmp = -1;
else
*cmp = 1;
printf("cmp_int cmp %d\n", *cmp);
}
__global__ void test_cmp()
{
int* a;
cudaMalloc(&a, sizeof(int));
*a = 2;
int* b;
cudaMalloc(&b, sizeof(int));
*b = 3;
int* cmp;
cudaMalloc(&cmp, sizeof(int));
*cmp = -3;
printf("test_cmp cmp %d\n", *cmp);
cmp_int(a, b, cmp);
// How to wait here for finishing of the launched kernel of the previous line?
printf("test_cmp cmp %d\n", *cmp);
}
int main()
{
test_cmp();
cudaDeviceSynchronize();
return 0;
}
< /code>
Die Ausgabe ist: < /p>
test_cmp cmp -3
test_cmp cmp -3
cmp_int cmp -3
cmp_int cmp -1
< /code>
Während ich die folgende Ausgabe erwarte: < /p>
test_cmp cmp -3
test_cmp cmp -1
cmp_int cmp -3
cmp_int cmp -1
< /code>
In meinen Forschungen zu anderen Themen habe ich __syncThreads () gesehen, aber ich verstehe die richtige Verwendung nicht und wenn es für mein Problem angemessen ist (ich versuche einige Dinge, aber ohne Erfolg).
Wie warte ich einen Kernel, um in einem anderen Kernel in Cuda fertig zu werden? ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post