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

Why does my CUDA kernel execution time increase with successive launches?

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

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

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,但以前从未见过这种行为。想知道是否有人注意到这一点?我的平台是Windows10,CUDA 7.5,微星笔记本,GeForce 970m。

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

GeForce 970m 具有加速时钟。 运行 在 运行 之后,您的 GPU 温度升高,很可能当温度升高时,提升不太可能达到最高水平。

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

要通过 nvidia-smi 禁用自动提升,请使用此命令:

sudo nvidia-smi --auto-boost-default=DISABLED