标签: nvml

无法运行查询NVML的CUDA代码-有关libnvidia-ml.so的错误

最近,一位同事需要使用NVML查询设备信息,因此我下载了Tesla开发工具包3.304.5,并将文件nvml.h复制到了/ usr / include。为了进行测试,我在tdk_3.304.5 / nvml / example中编译了示例代码,并且工作正常。

整个周末,系统中发生了某些更改(我无法确定更改的内容,而且我不是唯一有权访问计算机的更改),现在使用nvml.h的任何代码(例如示例代码)都会失败,并出现以下错误:

Failed to initialize NVML:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WARNING:

You should always run with libnvidia-ml.so that is installed with your NVIDIA Display Driver. By default it's installed in /usr/lib and /usr/lib64. libnvidia-ml.so in TDK package is a stub library that is attached only for build purposes (e.g. machine that you build your application doesn't have to have Display Driver installed).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)

但是,我仍然可以运行nvidia-smi并读取有关我的K20m状态的信息,据我所知,nvidia-smi只是对nvml.h的一组调用。我收到的错误消息有些含糊,但我相信它告诉我nvidia-ml.so文件需要与我在系统上安装的Tesla驱动程序匹配。为了确保一切正确,我重新下载了CUDA 5.0并安装了驱动程序,CUDA运行时和测试文件。我确定nvidia-ml.so文件与驱动程序匹配(均为304.54),所以对于可能出了什么问题我感到很困惑。我可以使用nvcc编译和运行测试代码,也可以运行自己的CUDA代码,只要它不包含nvml.h。

有没有人遇到此错误或对纠正此问题有任何想法?

$ ls -la /usr/lib/libnvidia-ml*
lrwxrwxrwx. 1 root root     17 Jul …
Run Code Online (Sandbox Code Playgroud)

cuda nvcc tesla nvml

5
推荐指数
1
解决办法
2万
查看次数

NVidia NVML nvmlDeviceGetMemoryInfo() 立即加载和卸载 nvapi64.dll

我使用一些 NVIDIA 管理库功能在我的应用程序中生成指标。

每 1 秒我在一个线程中调用 nvmlDeviceGetMemoryInfo(),几分钟后,在 Visual Studio 的输出中,我可以读取数百个:

'MyApp.exe' (Win32): Loaded 'C:\Windows\System32\nvapi64.dll'. 
'MyApp.exe' (Win32): Unloaded 'C:\Windows\System32\nvapi64.dll'
...
'MyApp.exe' (Win32): Loaded 'C:\Windows\System32\nvapi64.dll'. 
'MyApp.exe' (Win32): Unloaded 'C:\Windows\System32\nvapi64.dll'
'MyApp.exe' (Win32): Loaded 'C:\Windows\System32\nvapi64.dll'. 
'MyApp.exe' (Win32): Unloaded 'C:\Windows\System32\nvapi64.dll'
...
Run Code Online (Sandbox Code Playgroud)

来自 NVML 的其他函数,如 nvmlDeviceGetCount()、nvmlDeviceGetHandleByIndex()、nvmlDeviceGetClockInfo() 或 nvmlDeviceGetUtilizationRates() 不会产生这种实时加载/卸载 nvapi64.dll。

是否可以避免卸载此 dll,以使其可用于我下次调用 nvmlDeviceGetMemoryInfo() ?

编辑 :

我调用这个函数来检索这样的 gpu 内存统计信息:

nvmlMemory_t memInfo;
if (nvmlDeviceGetMemoryInfo(device, &memInfo) == NVML_SUCCESS) {
    this->gpuMemUsed = memInfo.used;
    this->gpuMemTotal = memInfo.total;
}
Run Code Online (Sandbox Code Playgroud)

我在 Debug 和 Release 中看到这些输出行,每次我调用 nvmlDeviceGetMemoryInfo() 时都会有几个 Loaded nvapi64.dll / Unloaded nvapi64.dll …

c++ windows dll nvml

5
推荐指数
1
解决办法
270
查看次数

在一段时间内有没有办法甚至可能获得GPU的整体利用率?

我想在一段时间内获得有关GPU(我的是NVIDIA Tesla K20,在Linux上运行)的整体利用率的信息."整体"我的意思是,计划运行多少流多处理器,以及计划运行多少GPU核心(我想如果核心正在运行,它将以全速/频率运行?).如果我可以通过触发器测量整体利用率也会很好.

当然在问这里之前,我已经搜索并调查了几个现有的工具/库,包括NVML(和建立在它之上的nvidia-smi),CUPTI(和nvprof),PAPI,TAU和Vampir.但是,似乎(但我还不确定)他们都没有能够提供所需的信息.例如,NVML可以按百分比报告"GPU利用率",但根据其文档/评论,此利用率是"在GPU上执行一个或多个内核的过去一秒的时间百分比",这显然不够准确.对于nvprof,它可以报告单个内核的触发器(具有非常高的开销),但我仍然不知道GPU的使用情况.

PAPI似乎能够获得指令计数,但它不能与其他浮点运算不同.我还没有尝试过其他两种工具(TAU和Vampir),但我怀疑他们能满足我的需求.

所以我想知道甚至可以获得GPU的整体利用率信息吗?如果没有,估计它的最佳选择是什么?我这样做的目的是为在GPU上运行的多个作业找到更好的计划.

我不确定我是否已经清楚地描述了我的问题,所以如果有什么我可以添加以便更好地描述,请告诉我.

非常感谢你!

profiling cuda utilization nvml

4
推荐指数
1
解决办法
1681
查看次数

NVV中的nvidia-smi -ac等价物

我学会了比nvidia-smi -ac可以用来改变GPU核心和内存的时钟速率.nvidia-smi是建立在NVML库的基础上的吗?自从我检查文档以来,它在NVML中的等价物是什么

http://cyber.sibsutis.ru:82/GPGPU/sdk/CUDA_TOOLKIT/nvml.pdf

但只能看到用于获取时钟速率值而不是设置它们的API?

谢谢

cuda nvml

0
推荐指数
1
解决办法
1891
查看次数

标签 统计

nvml ×4

cuda ×3

c++ ×1

dll ×1

nvcc ×1

profiling ×1

tesla ×1

utilization ×1

windows ×1