nvmlDeviceSetDefaultFanSpeed_v2 does not resume fan speed algorithm! Please fix!

nvmlDeviceSetDefaultFanSpeed_v2 doesn’t work as documented. According to the header, it’s supposed to set the fan speed AND resume the auto fan curve!

Reproducing is as easy as setting the fan speed to 100% via nvmlDeviceSetFanSpeed_v2 and then calling nvmlDeviceSetDefaultFanSpeed_v2. The fan speed will both be reported as decreasing until it hits the “default” speed and will audible decrease in noise. Start any graphics-intensive application(in my case, Unigine Superposition) and notice that the only fans to ramp up are the ones controlled by custom AIB fan controllers! The fan speed for the GPU itself(index 0) is still at default speeds!

Nvidia, I REALLY appreciate the new NVML functions and all, but the quality of the last dozen or so functions is absolutely terrible.

Here is just A FEW highlights:

  1. There is a copy/paste error here:
  1. The nvmlDeviceSetTemperatureThreshold function takes in a pointer for some reason and only accepts one of the many enum types, NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_CURR, it supposedly allows you to set:

Nor is there a way to get default the default value of that one value. How do I reset it to default!?!?

  1. There are references to NVAPI opaque types in NVML when they aren’t even used:
  1. An enum type, nvmlGpuUtilizationDomainId_t, is defined but nothing uses it:

I’m guessing those enum values correspond to the struct array defined after it, but it’s not clear!

  1. How are you supposed to even use nvmlDeviceGetThermalSettings?
  1. What even is GPCCLK VF!?!?

The function docs give zero indication. Calling the get function on my 1080 returns NVML_ERROR_NOT_FOUND!?!? What range of values are acceptable for setting an offset?

  1. New constants were defined for defining when adaptive clock was disabled(0)/enabled(1):

but NVML already has nvmlEnableState_t:

Please Nvidia, stop this!

  1. How are you supposed to even use nvmlDeviceGetThermalSettings?

In case anyone is wondering, the entire function seems to be broken. The “count” field is what gives you the amount of populated thermal sensors but you have no way of knowing that beforehand. You can tell because if you invoke the function with a value greater than 2 it’ll throw NVML_ERROR_UNKNOWN. So I guess you just always invoke it with an index of 0?

And I just found out Windows doesn’t have these functions yet. Can someone from Nvidia please explain what is going on?