Timer CUDA:CUtil定时器-运行时间混乱
当我评估我的程序时,我发现在某个时刻,我的时间间隔达到100毫秒。我搜索了每一次手术,但这次没有一次手术。然后我注意到,无论我在哪里调用cudaThreadSynchronize,第一个调用都需要100毫秒。然后我在下面写了这样一个例子。在第一行调用cudaThreadSynchronize时,发现末尾的已用时间值小于1毫秒。但如果不调用,则平均需要110毫秒Timer CUDA:CUtil定时器-运行时间混乱,timer,cuda,initialization,elapsedtime,Timer,Cuda,Initialization,Elapsedtime,当我评估我的程序时,我发现在某个时刻,我的时间间隔达到100毫秒。我搜索了每一次手术,但这次没有一次手术。然后我注意到,无论我在哪里调用cudaThreadSynchronize,第一个调用都需要100毫秒。然后我在下面写了这样一个例子。在第一行调用cudaThreadSynchronize时,发现末尾的已用时间值小于1毫秒。但如果不调用,则平均需要110毫秒 int main(int argc, char **argv) { cudaThreadSynchronize(); //Com
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,必须首先在GPU上创建“CUDA上下文”,这大约需要70-100ms。在您的示例中,
cudaThreadSynchronize()代码>正在生成上下文。仅为应用程序创建一次上下文。在进行计时分析时,我也会进行虚拟内存复制以创建上下文(正如您在上面使用cudaThreadSynchronize();
)。要使用CUDA,必须首先在GPU上创建“CUDA上下文”,这需要大约70-100毫秒。在您的示例中,cudaThreadSynchronize()代码>正在生成上下文。仅为应用程序创建一次上下文。在进行计时分析时,我还会进行虚拟内存复制以创建上下文(正如您在上面使用cudaThreadSynchronize();
)所做的那样)。在代码的计时部分之前强制创建CUDA上下文的“经典”方法是调用cudaFree(0)。“经典”在代码的定时部分之前强制创建CUDA上下文的方法是调用cudaFree(0)。可能重复的