为什么我的CUDA内核执行时间会随着连续启动而增加?

时间:2016-05-24 17:00:47

标签: performance cuda benchmarking

我正在使用CUDA对应用程序进行原型设计。我一直在针对CPU进行基准测试,并注意到一些变量运行时。我决定从命令行循环运行我的应用程序,以便我可以收集更好的统计信息。我运行了50次应用程序并记录了结果。我很惊讶地看到经过的内核时间随着启动数的增加而增加。

GPU Kernel Time Increasing With Run Number

这是一个片段,因此您可以看到正在计时的代码部分:

int nblocks = (int)ceil((float)n / (float)NUM_THREADS);

gpuErrchk(cudaEventRecord(start, 0));
gpuperfkernel << <nblocks, NUM_THREADS >> >(dmetadata, ddatax, ddatay);
gpuErrchk(cudaPeekAtLastError());
gpuErrchk(cudaDeviceSynchronize());
gpuErrchk(cudaEventRecord(stop, 0));
gpuErrchk(cudaEventSynchronize(stop));

gpuErrchk(cudaEventElapsedTime(&milliseconds, start, stop));
printf("GPU kernel took %f milliseconds.\n", milliseconds);
gpuelapsed += milliseconds;

我和CUDA合作了很多,之前我没有见过这种行为。想知道是否有人注意到这一点?我的平台是Windows 10,CUDA 7.5,MSI笔记本,GeForce 970m。

由于我在笔记本电脑上,我认为它可能是与电源相关的设置或类似的设置,但我已将所有设置都设置为高性能并禁用了屏幕保护程序。

1 个答案:

答案 0 :(得分:2)

GeForce 970m具有升压时钟。运行后运行,GPU的温度上升,最可见的是,当温度升高时,增压不太可能达到最高水平。

您可以使用nvidia-smi监控gpu温度。还有一个监控API。如果你想验证这一点,你的升压设置也应该在nvidia-smi中进行配置。