CUDA 中的内核启动通常是异步的,这(据我所知)意味着一旦启动 CUDA 内核,控制就会立即返回给 CPU。当 GPU 忙于处理数字时,CPU 会继续做一些有用的工作,除非 CPU 使用cudaThreadsynchronize()
或强制停止cudaMemcpy()
。
现在我刚刚开始使用 CUDA 的Thrust库。Thrust 中的函数调用是同步的还是异步的?
换句话说,如果我调用thrust::sort(D.begin(),D.end());
where D is a device vector,那么使用来测量排序时间是否有意义
start = clock();//Start
thrust::sort(D.begin(),D.end());
diff = ( clock() - start ) / (double)CLOCKS_PER_SEC;
std::cout << "\nDevice Time taken is: " <<diff<<std::endl;
如果函数调用是异步的,那么任何向量的 diff 都将为 0 秒(对于计时来说这是垃圾),但如果它是同步的,我确实会获得实时性能。