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

Programme in C++. Entwicklerforum
Guest
 Wie warte ich einen Kernel, um in einem anderen Kernel in Cuda fertig zu werden?

Post by Guest »

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post