Jump to content

NVidia GPU Throttling cause


Grestorn

Recommended Posts

Hi!

I've been using AIDA64 for a some years now and I've put a lot of work in my panel - I really appreciate the support you put into AIDA64!

One thing I'd like to add to my panel is the reason for the current limit for the GPU. GPU-Z, EVGA Precision X and MSI Afterburner all have indicators to report the cause for throttling as "Power limit", "Voltage limit", "Temperature limit" or "No Load Limit". I guess these values are available through the nvidia API. I guess the best would be to 4 different sensor values for each of those, each of them being 0 or 1. 

I'd then be able to add a kind of "LED indicator" for each of those states to my panel: 

IMG_0072.thumb.PNG.08bfaa7f2952fea38656b200fc040a63.PNG

 

Is that something you'd consider to add to AIDA64?

Link to comment
Share on other sites

  • 4 weeks later...
  • 3 weeks later...

We haven't yet found a way to detect those states.  We'll also need to find out how to integrate them in the existing AIDA64 hardware monitoring module framework, since that one doesn't support yes/no states properly yet. Please give us a bit more time on this ;)

Link to comment
Share on other sites

Thanks for this status report! Very much appreciated. 

I thought that these values are published in the NVAPI but then you'd have certainly found it yet. Maybe you can contact the guys from GPU-Z, RivaTuner/Afterburner. They show this value, among others. 

For how to integrate it: Either make a single value which could assume discreet values like 0=No limit, 1=Power Limit, 2=Temperature Limit, 3=Voltage limit. That would be fine for me, because I'd use this to create a color indicator (making a big bar which is mostly hidden behind a texture so that you can only see the bar's color through a small hole that makes it look like a small bulb. Then I use the values to change the color of this bar to reflect the different states). 

Of course, you could also create 4 separate simple 0/1 values, but that seems like overkill to me. 

Link to comment
Share on other sites

On ‎2017‎. ‎05‎. ‎05‎. at 8:41 PM, Grestorn said:

Thanks for this status report! Very much appreciated. 

I thought that these values are published in the NVAPI but then you'd have certainly found it yet. Maybe you can contact the guys from GPU-Z, RivaTuner/Afterburner. They show this value, among others. 

For how to integrate it: Either make a single value which could assume discreet values like 0=No limit, 1=Power Limit, 2=Temperature Limit, 3=Voltage limit. That would be fine for me, because I'd use this to create a color indicator (making a big bar which is mostly hidden behind a texture so that you can only see the bar's color through a small hole that makes it look like a small bulb. Then I use the values to change the color of this bar to reflect the different states). 

Of course, you could also create 4 separate simple 0/1 values, but that seems like overkill to me. 

The problem with the single value is that to my understanding the throttling cause is not reported as an "either", but as a bit field combo, so there's a possible state of power limit + voltage limit in the same time, or even power limit + temperature limit + voltage limit.  So reporting that would either need discreet values -- which would blow up the number of sensor items considerably --, or would require us to report the values as a string (text form).  The latter solution would however make it impossible for you to put indicator LEDs on your panel...

Link to comment
Share on other sites

Hm, when I look at the graphs of MSI Afterburner, it seems that the bits are actually mutual exclusive. And GPU-Z also displays it as a single state. So it seems even though it's technically represented as a bit field, there's only one bit that can be set at one time (which also would make sense logically). 

I'd just go for a single value with one discreet value for each state. A string wouldn't help me, as you said yourself.

Link to comment
Share on other sites

  • 4 weeks later...

We've added the Performance Cap Reason information to the Display / GPU page in the latest beta version of AIDA64 Extreme available at:

https://www.aida64.com/downloads/latesta64xebeta

After upgrading to this new version, make sure to restart Windows to finalize the upgrade.

It can indeed have multiple reasons combined as a bit mask, so it's not trivial how to add that to the existing LCD and SensorPanel modules.  We'll think about it :)

Link to comment
Share on other sites

Yes, way to go... !!

Can't wait to get this in the Panel. 

In theory, separate indicator values would work well. For a simple "LED" indicator, I'd make create bar elements for each value on to of each other. 0 would make them very small (i.e. invisible) while 1 would make it big enough, so that only one color becomes visible.

This way you could also use a "sliding" indicator, showing the throttling reason over time (similar to GPU-Z's display) by placing a 'graph' element for each value on top of each other. 0 being all the way down and 1 all the to the top. 

Link to comment
Share on other sites

1 hour ago, Grestorn said:

Yes, way to go... !!

Can't wait to get this in the Panel. 

In theory, separate indicator values would work well. For a simple "LED" indicator, I'd make create bar elements for each value on to of each other. 0 would make them very small (i.e. invisible) while 1 would make it big enough, so that only one color becomes visible.

This way you could also use a "sliding" indicator, showing the throttling reason over time (similar to GPU-Z's display) by placing a 'graph' element for each value on top of each other. 0 being all the way down and 1 all the to the top. 

We don't really want to implement separate indicators.  It would involve adding 48 new sensor items (6 reasons multiplied by 8 GPUs).  We're thinking more in the line of simply returning the reason bit mask as it is passed by ForceWare.  It would work like: a value of 1 means Power Limit, 2 means Temperature Limit, 4 means Reliability Voltage, 16 means Utilization, etc.  A value of 3 would mean Power Limit + Temperature Limit occuring in the same time, and a value of 7 would mean Power Limit + Temperature Limit + Reliability Voltage occuring in the same time.  I'm not sure however how you could define a proper LED colour assignment to make it useful for your purposes.

Link to comment
Share on other sites

  • 2 years later...

Hello Greston , Fiery,

sorry for resuming this old post, but time has passed, AIDA goes strongly ahead, and maybe I have a workaround to suggest about that topic.

SITUATION

Let me resume. GPU performance can be limited by

  • voltage
  • power
  • temperature
  • sli link saturation

Those value are mutually exclusive (just one set, other zero)

REQUEST

We need a sensor for them, for each one of them. A true/false 0-1 sensor.

Then we need a sensorpanel item like a circle (LED). If sensor=1 then user pick a color, else another color.

FIERY 2017 answer

we don't want to add too much sensor.

WORKAROUND 

To workaround this, the following suggestion needs a little bit of help from you with a modification, but with same approch. ONE SENSOR

Just one sensor, but not as a string (like now) but as an integer. let's make this DEFINE-like map

  • voltage =10
  • power = 20
  • temperature = 30
  • sli link saturation = 40

Simply with this, now AIDA SensorPanel user can do the following

define a sensor bar(voltage) with the following

image.png.187a57653c5052e2c280dc0543fe25c1.png

 

define a sensor bar (power) with the following

image.png.cee04379aee5b3be41556f5d460e9c65.png

define a sensor bar(temperature) with the following (image omitted, it should be clear)

min 0 black

limit 1 30 green

limit 2 40 black

limit 3 41 black

max 50

define a sensor bar(sli link limit) with the following (image omitted, it should be clear)

min 0 black

limit 1 40 green

limit 2 41 black

limit 3 42 black

max 50

And this should work as intended (sorry I haven't write software behavioral emulator to test). It should work as binary sensors, limiting a "5 switch-case" sensor 

ADDITIONAL REQUEST/IMPROVEMENT

It would be "more elegant and clean" if you can create a binary type sensor to do such activities, or even better to let user decides the number of condition (now fixed to 5). 2 condition, one color for match, other color for not matched.

 

 

Link to comment
Share on other sites

the same workaround should be even possible using AIDA "Gauge custom" (in this case we can load our .png file). It should be more  "clean and elegant"

the gauge has 16 levels, so if AIDA can-define the value as above they will act in a scale 0-40 (step=10)

so (40-0) / 16 = 2.5 is the corresponding step size in the png scale.

FOR VOLTAGE (defined = 10)

we define a gauge 0 to 40 with the following 15 step png mapping

  • 0 to 3 black.png
  • 4 green.png
  • 5 to 15 black-png

FOR POWER (defined = 20)

we define a gauge 0 to 40 with the following 15 step png mapping

  • 0 to 7 black.png
  • 8 green.png
  • 9 to 15 black-png

FOR TEMPERATURE (defined = 30)

we define a gauge 0 to 40 with the following 15 step png mapping

  • 0 to 11 black.png
  • 12 green.png
  • 13 to 15 black-png

FOR SLI-LINK SATURATION (defined = 40)

we define a gauge 0 to 40 with the following 15 step png mapping

  • 0 to 15 black.png
  • 16 green.png

 

It should work :-) .... 

Link to comment
Share on other sites

On 5/7/2020 at 10:03 PM, ronzino said:

Hello Greston , Fiery,

sorry for resuming this old post, but time has passed, AIDA goes strongly ahead, and maybe I have a workaround to suggest about that topic.

SITUATION

Let me resume. GPU performance can be limited by

  • voltage
  • power
  • temperature
  • sli link saturation

Those value are mutually exclusive (just one set, other zero)

REQUEST

We need a sensor for them, for each one of them. A true/false 0-1 sensor.

Then we need a sensorpanel item like a circle (LED). If sensor=1 then user pick a color, else another color.

FIERY 2017 answer

we don't want to add too much sensor.

WORKAROUND 

To workaround this, the following suggestion needs a little bit of help from you with a modification, but with same approch. ONE SENSOR

Just one sensor, but not as a string (like now) but as an integer. let's make this DEFINE-like map

  • voltage =10
  • power = 20
  • temperature = 30
  • sli link saturation = 40

Simply with this, now AIDA SensorPanel user can do the following

define a sensor bar(voltage) with the following

image.png.187a57653c5052e2c280dc0543fe25c1.png

 

define a sensor bar (power) with the following

image.png.cee04379aee5b3be41556f5d460e9c65.png

define a sensor bar(temperature) with the following (image omitted, it should be clear)

min 0 black

limit 1 30 green

limit 2 40 black

limit 3 41 black

max 50

define a sensor bar(sli link limit) with the following (image omitted, it should be clear)

min 0 black

limit 1 40 green

limit 2 41 black

limit 3 42 black

max 50

And this should work as intended (sorry I haven't write software behavioral emulator to test). It should work as binary sensors, limiting a "5 switch-case" sensor 

ADDITIONAL REQUEST/IMPROVEMENT

It would be "more elegant and clean" if you can create a binary type sensor to do such activities, or even better to let user decides the number of condition (now fixed to 5). 2 condition, one color for match, other color for not matched.

 

GPU PerfCap is not a mutually exclusive list of values but a bitmask.  So not just one could happen at any given time, but one or more in the same time.  That's why it's quite difficult to handle it as an integer value or any other numeric value :(

Link to comment
Share on other sites

It is a bit mask, correct, but as far as I can see in Aida the mask is then mapped/decoded in static strings. 

What happen if two  happen at a given time? do you print two strings concatenated or just  one of the two? ( I don't have a PC with Sli now, I will check next Monday). 

If you print just one string (apart the logic behind which PerfCap to choose) , it is already a bitmap decode to an integer (the string array index) 

Link to comment
Share on other sites

On 5/16/2020 at 1:06 AM, ronzino said:

It is a bit mask, correct, but as far as I can see in Aida the mask is then mapped/decoded in static strings. 

What happen if two  happen at a given time? do you print two strings concatenated or just  one of the two? ( I don't have a PC with Sli now, I will check next Monday). 

If you print just one string (apart the logic behind which PerfCap to choose) , it is already a bitmap decode to an integer (the string array index) 

It's printed as a list of strings, separated by comma.  So a single or multiple reason strings are included in the resulting text.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...