我是 CUDA 新手,对cudaEvent
. 我现在有一个代码示例,如下所示:
float elapsedTime;
cudaEvent_t start, stop;
CUDA_ERR_CHECK(cudaEventCreate(&start));
CUDA_ERR_CHECK(cudaEventCreate(&stop));
CUDA_ERR_CHECK(cudaEventRecord(start));
// Kernel functions go here ...
CUDA_ERR_CHECK(cudaEventRecord(stop));
CUDA_ERR_CHECK(cudaEventSynchronize(stop));
CUDA_ERR_CHECK(cudaEventElapsedTime(&elapsedTime, start, stop));
CUDA_ERR_CHECK(cudaDeviceSynchronize());
关于这段代码,我有两个问题:
1.最后一个cudaDeviceSynchronize
有必要吗?因为根据 的文档cudaEventSynchronize
,它的功能是等待直到最近一次调用之前的所有设备工作完成cudaEventRecord()
。因此,鉴于我们已经调用了cudaEventSynchronize(stop)
,我们还需要cudaDeviceSynchronize
再次调用吗?
2.上面的代码和下面的实现有什么不同:
#include <chrono>
auto tic = std::chrono::system_clock::now();
// Kernel functions go here ...
CUDA_ERR_CHECK(cudaDeviceSynchronize());
auto toc = std::chrono::system_clock:now();
float elapsedTime = std::chrono::duration_cast < std::chrono::milliseconds > (toc - tic).count() * 1.0;