我想知道这个问题:有没有办法同步一个内核函数?例如,如果我有这样的事情:
function_1 <<< dimgrid, dimblock >>> (param1, param2, param3);
funckion_2 <<< dimgrid, dimblock >>> (param4, param5, param5);
function_1 <<< dimgrid, dimblock >>> (param6, param7, param8);
是否可以知道第二个function_1
是否在第一个之前完成了? cudaDeviceSynchronize()
函数可以帮我解决这个问题吗?我需要这个,因为我必须为其他内核函数重用一些资源(param-i
)。
答案 0 :(得分:1)
如果将每个内核启动到自己的流中,则可以在运行要等待的内核的流上使用cudaStreamSynchronize。如下所示:
//stream creation for stream1, stream2
...
function_1 <<< dimgrid, dimblock, 0, stream1 >>> (param1, param2, param3);
funckion_2 <<< dimgrid, dimblock, 0, stream2 >>> (param4, param5, param5);
function_1 <<< dimgrid, dimblock, 0, stream1 >>> (param6, param7, param8);
cudaStreamSynchronize(stream1);
可能会做你想要的。