如何设置专用 GPU 以对 CUDA 内核进行基准测试?

Posted

技术标签:

【中文标题】如何设置专用 GPU 以对 CUDA 内核进行基准测试?【英文标题】:How to setup a dedicated GPU in order to benchmark a CUDA kernel? 【发布时间】:2016-02-17 21:12:30 【问题描述】:

我想使用第二个 GPU 设备作为 linux 下的专用设备,以便对内核进行基准测试。

我正在测试的内核是一个没有减少的 SIMD 计算内核,而不是 X-Server 连接到 GPU,设备是 GeForge GTX-480,所以我认为计算能力是 2。因此,高级功能为动态并行和其他,被禁用。

使用 nvidia-smi 实用程序有多种设置 GPU 的模式

"Default" means multiple contexts are allowed per device.
"Exclusive Process" means only one context is allowed per device, usable from multiple threads at a time.
"Prohibited" means no contexts are allowed per device (no compute apps).

为了获得尽可能忠实的基准,设置 GPU 的最佳模式是什么?

为了使这种设置永久化,我应该使用什么命令?

我正在使用以下标志编译内核:

nvcc --ptxas-options=-v -O3   -w   -arch=sm_20 -use_fast_math -c -o

是否存在更好的标志组合以便从编译器获得更多帮助以获得更快的执行时间?

任何建议将不胜感激。

【问题讨论】:

我并不完全清楚您希望解决什么问题,但您可能想探索CUDA_VISIBLE_DEVICES 的实用性,如blog post 中所述 我设法使用 HANDLE_ERROR(cudaSetDevice(1)); 选择了目标 GPU; 我设法使用 HANDLE_ERROR(cudaSetDevice(1)) 选择了目标 GPU。我认为它是导出变量 CUDA_VISIBLE_DEVICES 的编程等价物。我的问题与什么更合适有关?是否将 GPU 设置为计算专用模式。 【参考方案1】:

我的问题与什么更合适有关?是否将 GPU 设置为计算专用模式。

将 GPU 设置为独占进程还是默认无关紧要,只要只有一个进程尝试使用该 GPU。

您通常不希望使用独占线程,除非在特定情况下,因为独占线程可能会阻止多线程 GPU 应用程序正常运行,并且还可能干扰其他功能,例如分析器功能。

为了使这种设置永久化,我应该使用什么命令?

如果您参考 nvidia-smi 命令行帮助 (nvidia-smi --help) 或 nvidia-smi 手册页 (man nvidia-smi),您可以确定进行更改的命令。在再次明确更改之前,您所做的任何更改都将是永久性的。

【讨论】:

以上是关于如何设置专用 GPU 以对 CUDA 内核进行基准测试?的主要内容,如果未能解决你的问题,请参考以下文章

nvidia cuda访问gpu共享内存

如何使用 Python 和 Numba 获取 GPU 中的 CUDA 内核数量?

Cuda 内核代码驻留在英伟达 GPU 上的啥位置?

cuda shader

在对 GPU 内核进行 doxygen 注释时,如何记录有关网格的信息?

如何使用团队帐户生成“应用程序专用密码”以对应用程序进行公证?