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

Performance 为什么我的CUDA内核执行时间会随着连续的启动而增加?,performance,cuda,benchmarking,Performance,Cuda,Benchmarking,我正在用CUDA制作一个应用程序的原型。我已经针对CPU对其进行了基准测试,并注意到一些可变的运行时。我决定从命令行循环运行我的应用程序,以便收集更好的统计数据。我运行了50次应用程序并记录了结果。我非常惊讶地看到,内核运行时间随着启动次数的增加而增加 下面是一个代码段,您可以看到正在计时的代码部分: int nblocks = (int)ceil((float)n / (float)NUM_THREADS); gpuErrchk(cudaEventRecord(start, 0)); gp

我正在用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;
intnblocks=(int)ceil((float)n/(float)NUM_线程);
gpuErrchk(cudaEventRecord(start,0));
gpuperfkernel>(dmetadata、ddatax、ddatay);
gpuerchk(cudaPeekAtLastError());
gpuErrchk(cudaDeviceSynchronize());
gpuErrchk(cudaEventRecord(stop,0));
gpuErrchk(cudaEventSynchronize(stop));
gpuErrchk(cudaeventreleasedtime(&毫秒,开始,停止));
printf(“GPU内核花费了%f毫秒。\n”,毫秒);
gpued+=毫秒;
我和CUDA合作过很多次,我以前从未见过这种行为。想知道有没有人注意到这一点?我的平台是Windows10,CUDA7.5,MSI笔记本,GeForce 970m


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

GeForce 970m具有升压时钟。一次又一次地运行,GPU的温度会升高,最值得证明的是,当温度升高时,提升不太可能达到最高水平


您可以使用nvidia smi监控gpu温度。还有一个监控API。如果您想验证,您的boost设置也应该在nvidia smi中进行一定程度的配置。

总的来说,这在测量时间上的差异不到1%,从最小到最大。windows操作系统也在使用您的GPU,并且实际上管理您对GPU的所有CUDA访问。Windows是一个繁忙的环境。我并不奇怪会有一些变化。这正是正在发生的事情。我下载了speedfan并在测试应用程序时运行它。GPU温度曲线与基准图中的曲线形状相同。谢谢