Как подождать ядро, чтобы закончить в другом ядре в Куда?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как подождать ядро, чтобы закончить в другом ядре в Куда?

Сообщение Anonymous »

Я продолжаю исследование в использовании 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»