当我评估我的程序时,我发现在某些时候我得到了高达 100 毫秒的时间间隔。我已经搜索了每个操作,但单独没有操作花费这个时间。然后我注意到无论我在哪里进行 cudaThreadSynchronize 调用,第一次调用都需要 100 毫秒。然后我在下面写了这样一个例子。在第一行调用 cudaThreadSynchronize 时,发现最后经过的时间值小于 1 毫秒。但如果不调用它,则平均需要 110 毫秒。
int main(int argc, char **argv)
{
cudaThreadSynchronize(); //Comment out it then get 110msec as elapsed time..
unsigned int timer;
cutCreateTimer(&timer);
cutStartTimer(timer);
float *data;
CUDA_SAFE_CALL(cudaMalloc(&data, sizeof(float) * 1024));
cutStopTimer(timer);
printf("CUT Elapsed: %.3f\n", cutGetTimerValue(timer));
cutDeleteTimer(timer);
return EXIT_SUCCESS;
}
我认为一开始的 cudaThreadSynchronize() 会处理 CUDA 库的初始化。完全初始化内核的方法是否正确,不会影响其他操作的时间评估?在开始时调用 cudaThreadSynchronize 是否足够和正确,或者是否有任何正确的方法..