请教:
自己编写的 CUDA核函数,是异步执行的,即 调用后,立即返回 host端。但如果在核函数之后,调用函数
cudaDeviceSynchronize(),则要等 device端 的核函数执行完成之后才返回到 host端。那么:
(1) 是否可以根据这一点,由 clock() 函数来测量核函数的运行时间?命令如下:
clock_t time_Kernel = 0;
time_Kernel -= clock;
Kernel<<<,>>>();
cudaDeviceSynchronize();
time_Kernel += clock;
(2) 是否可以根据这一点,缩短整个程序的运行时间?如:
程序一:
Kernel<<<,>>>(); // CUDA核函数
function(); // host端运行的函数
cudaDeviceSynchronize();
程序二:
Kernel<<<,>>>(); // CUDA核函数
cudaDeviceSynchronize();
function(); // host端运行的函数
假设 Kernel 和 function 的运行时间相等,则 程序二 的运行时间是 程序一 的两倍,是否正确?
谢谢!
|