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

jun*_*007 4 performance benchmarking cuda

我正在使用 CUDA 制作应用程序原型。我一直在针对 CPU 进行基准测试,并注意到一些可变的运行时间。我决定从命令行循环运行我的应用程序,这样我就可以收集一些更好的统计数据。我运行该应用程序 50 次并记录结果。我非常惊讶地发现内核运行时间随着启动次数的增加而增加。

GPU 内核时间随运行次数增加

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

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;
Run Code Online (Sandbox Code Playgroud)

我经常使用 CUDA,但以前从未见过这种行为。想知道是否有人注意到这一点?我的平台是Windows 10、CUDA 7.5、MSI笔记本、GeForce 970m。

因为我使用的是笔记本电脑,所以我认为这可能是与电源相关的设置或类似的设置,但我已将所有内容设置为高性能并禁用了屏幕保护程序。

Flo*_*UET 5

GeForce 970m 具有升压时钟。每次运行后,GPU 的温度都会升高,而且当温度升高时,提升效果很可能不太可能达到最高水平。

您可以使用 监控 GPU 温度nvidia-smi。还有一个监控API。如果您想验证这一点,您的升压设置也应该在nvidia-smi某种程度上是可配置的。

nvidia-smi要通过使用以下命令禁用自动升压:

sudo nvidia-smi --auto-boost-default=DISABLED
Run Code Online (Sandbox Code Playgroud)