0
我遇到一些麻煩了解此代碼(在非超-Q運行兼容GPU):定時CUDA流
CHECK(cudaEventRecord(start, 0));
// dispatch job with depth first ordering
for (int i = 0; i < n_streams; i++)
{
kernel_1<<<grid, block, 0, streams[i]>>>();
kernel_2<<<grid, block, 0, streams[i]>>>();
kernel_3<<<grid, block, 0, streams[i]>>>();
kernel_4<<<grid, block, 0, streams[i]>>>();
}
// record stop event
CHECK(cudaEventRecord(stop, 0));
CHECK(cudaEventSynchronize(stop));
// calculate elapsed time
CHECK(cudaEventElapsedTime(&elapsed_time, start, stop));
printf("Measured time for parallel execution = %.3fs\n",
elapsed_time/1000.0f);
整個程序也可以找到here。
問題是:在計算經過時間之前,我們如何確定所有其他內核都已完成?
在非Null流和其他啓動的流之間似乎沒有任何同步。即使停止事件是隊列中的最後一個,根據我的理解,其他流的其他內核似乎仍有可能運行。