Wie warte ich einen Kernel, um in einem anderen Kernel in Cuda fertig zu werden?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie warte ich einen Kernel, um in einem anderen Kernel in Cuda fertig zu werden?

by Guest » 12 Feb 2025, 08:37

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).

Top