Я продолжаю исследование в использовании CUDA, и я сталкиваюсь с проблемой ядра. Я называю ядро в другом ядре и хочу ждать его отделки, прежде чем продолжить в родительском ядре. < /P>
Вот пример кода. < /P>
#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>
Выход: < /p>
test_cmp cmp -3
test_cmp cmp -3
cmp_int cmp -3
cmp_int cmp -1
< /code>
, тогда как я ожидаю следующего вывода: < /p>
test_cmp cmp -3
test_cmp cmp -1
cmp_int cmp -3
cmp_int cmp -1
< /code>
В моем исследовании по другим темам я видел __syncthreads (), но я не понимаю правильного использования, и если это подходит для моей проблемы (я пробую некоторые вещи, но без успеха).
Подробнее здесь: https://stackoverflow.com/questions/794 ... el-in-cuda