Синхронизация потока хоста и видеокарты в CUDA
Имеется следующий код. Он исполняется в потоке хоста(CPU). Мне нужно сделать так, чтобы поток CPU ждал того момента, пока две функции на видеокарте не завершат свою работу. На данный момент поток хоста не ждет завершения работы этих двух функций и просто выводит в качестве итогового времени "1". Подскажите, пожалуйста, как это исправить.
cudaEvent_t start, stop;
float time = 1;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
//-------------------GPU------------------------------------
DirectMoveMP << <1, n >> > (dev_a2, dev_b2, dev_n);
InversMoveMP << <1, n >> > (dev_a2, dev_x2, dev_b2, dev_n);
//----------------------------------------------------------
//cudaEventSynchronize();
//cudaThreadSynchronize();
cudaEventRecord(stop, 0);
cudaStatus = cudaEventElapsedTime(&time, start, stop);
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Вызов пользовательских куда функций обычно асинхронный, соответственно они возвращаются не дожидаясь окончания вычислений. Чтобы дождаться окончания выполнения всех вычислений на стороне GPU необходимо вызвать cudaDeviceSynchronize.