5

我使用一些 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'
...

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;
}

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

NVML 与 Cuda V10.2 一起提供。

4

1 回答 1

3

您可以简单地调用 LoadLibraryW(L"nvapi64.dll"); 在这个 dll 之后已经不会被卸载 (RbMm)

这成功了

于 2020-10-30T14:54:27.153 回答