CUDA同步内核

时间:2012-09-27 19:55:37

标签: 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并完成其任务?

2 个答案:

答案 0 :(得分:10)

在同一个流上启动的所有操作都是同步的。在上面的代码中,所有内核将一个接一个地运行。如果您需要并行运行kernel_1和kernel_2,则必须显式指定流。

答案 1 :(得分:2)

在您希望确保完成所有内核的位置使用cudaDeviceSynchronize();。在此命令之后,您可以假设所有内核和所有挂起的设备函数调用都已完成。