Instead of returning insufficient size, as they are supposed to, they can sometimes return invalid argument with zero code changes on Windows between different application launches for the duration of the application. This does not happen on Linux.
On the newest driver, it seems like yet another issue was introduced where getting max clocks via nvmlDeviceGetMaxClockInfo can sometimes return NVML_SUCCESS but fills the pointer with zero. This appears to be similar to another bug with acoustic threshold over a year ago.
Can someone at Nvidia please look at the Windows version of NVML? It’s full of so many bugs. Nearly every single PCIe function related to link generation, width, and speed has multi-threading-related bugs as well.
I know NVML isn’t a priority for anyone but these bugs have existed for so long and you aren’t releasing the full version of NVAPI so it’s not like anyone who wants to get this information has much of a choice in using it.
Hi @BlueGoliath ,
For the process list API, glad to hear you do not have an issue with that any longer.
For the clock API, I was unable to reproduce the issue. The reproduction was attempted on a system with NVIDIA GeForce GTX 1080, with Windows 10 (19045), 551.23 driver.
To see the values reported by the driver, run nvidia-smi -q
In the command output, under subsection Clocks, you should see the values being reported.
Did you try to reproduce using a multi-threaded application? My app, Envious FX, is extremely multi-threaded and calls multiple dozens of NVML functions every second concurrently. nvmlDeviceGetMaxClockInfo alone gets called multiple times a second. You would not likely see the issue with nvidia-smi.
Edit: to clarify, the bug is not “this function always returns garbage values” but “it sometimes returns garbage values”. I think it’s because of a multi-threading bug in NVML.
This is 100% a multi-threading issue. In fact, it appears to be the same one that plagues PCIe generation, bus width, and speed current/max but instead of throwing an error it just sometimes returns 0.
I’ve uploaded a special version of my app with Graphics/SM/Memory/Video max monitors here: