Reading the memory (junction) temperature via NVAPI

I’m trying to read the memory junction temperature of my RTX3090. I’m sure it’s possible because hwinfo64 displays it.

I was under the impression that this should be possible with NVAPI, however, I’m only able to get to the GPU temperature.

Here’s what I do:

  1. NvAPI_Initialize to start
  2. NvAPI_EnumPhysicalGPUs to get the GPU handle
  3. NvAPI_GPU_GetThermalSettings to get the temperature

This last call only returns the GPU temperature if I set it to NVAPI_THERMAL_TARGET_ALL .
If I set it to only return NVAPI_THERMAL_TARGET_MEMORY, it returns gibberish (the count is one, but the data is a random number)

I have the R460 version of the API and installed the latest NVidia drivers (461.92)

What am I missing? Or is hwinfo using some other API? Which one?

1 Like

Googling this issue led me here. Did you happen to find a solution yet?

Hi Tyler, sorry for the late reply.
No I have not been able to solve this issue.

From my “Internet research” it appears nobody knows how hwinfo64 obtains this information. It may even be an educated guess and not an actual measurement.

For instance, this is the response I got on Reddit:

Hi, any update on this? I’m also struggling to read memory temperatures. Tried both NVAPI and NVML, I was able to read GPU temperature only. GPU-Z and HwInfo are somehow magically reading it… Maybe I2C read?

No progress.

The best option I have found is to use hwinfo’s shared memory interface. Since version 7 this is now something that is freely available, however you may need to purchase the pro version if you have a long running process (which monitoring usually is)

https://www.hwinfo.com/forum/forums/shared-memory-interface.13/

However, I wish this was just part of some official API. That would make it much much easier.

1 Like

There’s been some progress in locating the undocumented function which appears to return the hotspot and memory temps. However still not clear how this function works with the mask parameter.