當我評估我的程序時,我發現在某個時間點,我的時間間隔達到100毫秒。我已經搜查了每一個手術,但這次沒有手術。然後我注意到,無論我在哪裏放置cudaThreadSynchronize調用,第一個調用都需要100毫秒。然後我寫下了這樣一個例子。在第一行調用cudaThreadSynchronize時,結束時的經過時間值小於1毫秒。但如果沒有調用,則平均需要110毫秒。CUDA:CUtil定時器 - 經過時間的混淆
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是正確的,或者是否有任何正確的方法。
[與第三方CUDA庫鏈接會減慢cudaMalloc的可能的重複](http://stackoverflow.com/questions/11664627/linking-with-3rd-party-cuda-libraries-slows-down-cudamalloc) – talonmies 2012-07-29 05:51:10