您好我对CUDA编程有疑问。 我有以下代码:CUDA同步内核
int main() {
for (;;) {
kernel_1 (x1, x2, ....);
kernel_2 (x1, x2 ...);
kernel_3_Reduction (x1);
// code manipulation host_x1
// Copy the pointer device to host
cpy (host_x1, x1, DeviceToHost)
cpu_code_x1_manipulation;
kernel_ (x1, x2, ....);
}
}
所以当复印的,如何确保kernel_1,kernel_2 kernel_3并完成他们的任务?
除非你使用流和一些其他的结构,所有的CUDA调用(内核,cudamemCpy等)将在默认流中发布,它们将被阻止(不会开始,直到前面的CUDA调用完成)。只要您不切换流,cudaMemcpy将不会将控制返回到CPU线程,直到它完成。同样,直到所有以前的cuda呼叫完成,cudaMemcpy才会开始。 –