您好我对使用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并完成其任务?
答案 0 :(得分:10)
在同一个流上启动的所有操作都是同步的。在上面的代码中,所有内核将一个接一个地运行。如果您需要并行运行kernel_1和kernel_2,则必须显式指定流。
答案 1 :(得分:2)
在您希望确保完成所有内核的位置使用cudaDeviceSynchronize();
。在此命令之后,您可以假设所有内核和所有挂起的设备函数调用都已完成。