• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.
  • The forums have been upgraded with support for dark mode. By default it will follow the setting on your system/browser. You may override it by scrolling to the end of the page and clicking the gears icon.

AMD Curve Optimizer any guides / experience

I have my 5800X up and running, and would like to do a little undervolting, however I am fairly confused.

1) How can I tell how much of an offset to set for each core? From what I read, it's during idle when too much can cause instability, so how the hell do I test that, and how can I even know what core is malfunctioning?

2) I learned there is something like quality of cores and that Hwinfo can show that, but I can't make ANY sense out of this:
View attachment 189672
What the heck does all this mean? I've already looked at Ryzen Master and cores 1 and 7 are the best, but these numbers I don't understand.

3) When taking the cores quality into consideration, which ones are to be run with higher lor lower curve offset? I keep reading conflicting information about this.

4) Is it enough to just play with the curve optimizer in my use case? My head is already like a baloon staring into the BIOS.



I have no idea what kind of sample do I have, probably utter shit, because all core boost in Prime95 is 4300MHz on average, and highest frequency frequency shown in Hwinfo over some period of time (not constant load) is 4850MHz.

Part of the confusing thing is that no one can tell you what core offset will be stable for each core on your cpu. Every cpu is different and the only way to figure it out is by testing your cpu to see what is stable and gives good results.
One thing that generally seems to be the case is that you can set a higher offset on the cores that are not rated as highly. This is why you see recommendations like set your best cores to X and all others to Y. However, even that might not be true on a single sample and so copying someone else's recommended settings is probably not going to work well.

Take a step back and first understand which are the relevant bios settings.
Then do some testing of your own to figure out what works well, while keeping an eye on temps and effective clocks in HWinfo.
I posted more details and a script here to test with prime95: https://www.overclock.net/threads/s...script-for-zen-3-curve-offset-tuning.1777112/

"I have no idea what kind of sample do I have, probably utter shit, because all core boost in Prime95 is 4300MHz on average, and highest frequency frequency shown in Hwinfo over some period of time (not constant load) is 4850MHz."
That pretty much matches my stock behavior on a 5800x, and to be honest, tuning curve offsets, while keeping things 100% stable, didn't gain very much at all. 4850MHz is the stock max boost. With a power hungry avx all core load 4300MHz is about what you will get. Disabling AVX in p95 will give higher frequencies.

Review frequencies seem to be higher. e.g. https://www.techpowerup.com/review/amd-ryzen-7-5800x/21.html
I have a feeling review samples were very good chips, but "This test uses a custom-coded application that mimics real-life performance—it is not a stress test like Prime95.", so the test used for that graph is most likely using less power (and therefore generating less heat) than prime95.
 
I really just want to undervolt the thing a bit for temperatures purposes, I'm not interested in hunting for higher frequencies, because I feel like for any meaningful gains I'd have to spend enormous times understanding tons of settings and testing for even longer, and the little I could get with just some minor adjustments would make absolutely zero difference for regular usage.
 
I really just want to undervolt the thing a bit for temperatures purposes, I'm not interested in hunting for higher frequencies, because I feel like for any meaningful gains I'd have to spend enormous times understanding tons of settings and testing for even longer, and the little I could get with just some minor adjustments would make absolutely zero difference for regular usage.
It's not that simple since precision boost will try to run as high a frequency as it can within the power and temp limits.

If you want your cpu to run cooler, you can enable PBO and lower the max temperature limit from the default value of 90C. Then PB will automatically limit to whatever temp you decide.
Your other option is to enable PBO, but rather than raise the power limits, lower them below stock settings.
Final option is to manually set frequency and voltage. But then you lose the benefits of increased frequency when not all cores are loaded, and some power saving when cores are idle.
 
Well, I blindly lowered the curve by -5 and -10 and highest temperatures in Prime95 dropped by ~5°C, so I guess it works.
 
Well, I blindly lowered the curve by -5 and -10 and highest temperatures in Prime95 dropped by ~5°C, so I guess it works.
Ok, well I guess check that it is stable now and if it is then be happy

Or continue down the slippery slope to find the lowest stable curve offset you can get for each core :-D
 
I have my 5800X up and running, and would like to do a little undervolting, however I am fairly confused.

1) How can I tell how much of an offset to set for each core? From what I read, it's during idle when too much can cause instability, so how the hell do I test that, and how can I even know what core is malfunctioning?

2) I learned there is something like quality of cores and that Hwinfo can show that, but I can't make ANY sense out of this:
View attachment 189672
What the heck does all this mean? I've already looked at Ryzen Master and cores 1 and 7 are the best, but these numbers I don't understand.

3) When taking the cores quality into consideration, which ones are to be run with higher lor lower curve offset? I keep reading conflicting information about this.

4) Is it enough to just play with the curve optimizer in my use case? My head is already like a baloon staring into the BIOS.



I have no idea what kind of sample do I have, probably utter shit, because all core boost in Prime95 is 4300MHz on average, and highest frequency frequency shown in Hwinfo over some period of time (not constant load) is 4850MHz.

Those clocks are about right for stock settings
If you enable PBO and set +200, you'll see 5050 for the low load core boosts, ideally randomly each core will reach that over time.

I cant read the HWinfo stats either lol. Next you need to play with the curve optimiser and deal with the chaos of stability testing when you're undervolting one core at a time like the rest of us
 
Could you add code so the script can be run when prime95.exe is already present in the current folder? To me it makes more sense to download P95 manually and put it there. The script also replies on specific version of the program.

Btw why that specific 84k FFT size?

Those clocks are about right for stock settings
If you enable PBO and set +200, you'll see 5050 for the low load core boosts, ideally randomly each core will reach that over time.

I cant read the HWinfo stats either lol. Next you need to play with the curve optimiser and deal with the chaos of stability testing when you're undervolting one core at a time like the rest of us
I think I read that if you increase the frequency limit, whatever undervolt you might have will likely not be stable anymore. Is that true?

Also I don't understand how can people suggest to lower the curve by -40 or something like that. I am on very brief unscietific testing of fourth core, and -30 crashed Prime95 on 3 out of 4 of them within minutes. One crashed after 10 hours, one flat out restarted the PC :D
 
Could you add code so the script can be run when prime95.exe is already present in the current folder? To me it makes more sense to download P95 manually and put it there. The script also replies on specific version of the program.
The latest version will check if there is an existing p95 folder and use that instead of extracting p95 again. So if you want you can manually extract any version of p95 into a p95 subfolder and then run the script. You can also change the name of the p95 zip file to extract by editing the variable near the top of the script. Just keep in mind I only tested it with that specific version of p95.
Btw why that specific 84k FFT size?
Good question. I should add this to the readme or something... when I started testing early on I was using a range of FFT sizes, but noticed that I typically hit an error after reaching 84k FFT size. So I just set it to that as a shortcut. It could be that higher values are better though, or that different values expose different instabilities. Feel free to experiment with different values and if you are shooting for 110% stability, then setting it to a range and running for at least a couple hours on each core is something you could try.
I think I read that if you increase the frequency limit, whatever undervolt you might have will likely not be stable anymore. Is that true?
This is true, since the cpu will reach higher boost clocks and those might not be stable with the undervolt. Actually people are even finding they need to add voltage to some cores (via a positive core offset) to be stable if they set a boost clock override >0. This is the case with my cpu where one core needs +10, another +3, but all others can keep a 0 or negative setting.

Also I don't understand how can people suggest to lower the curve by -40 or something like that. I am on very brief unscietific testing of fourth core, and -30 crashed Prime95 on 3 out of 4 of them within minutes. One crashed after 10 hours, one flat out restarted the PC :D
I feel you... actually part of what motivated me to share this script was to help with all the confusion created by posts that suggest setting core offsets a certain way rather than testing what specifically works with your cpu. I think part of what makes this hard is that it is possible for an unstable core offset to remain hidden in a lot of tests as it will need a single core load on that specific core to expose it.

Everyone's definition of stable is different as well. My testing is more geared to having a 24/7 reliable machine that runs at a good speed, rather than trying to reach the highest single benchmark score I can. Those are different goals as for a high score you just need things stable for long enough to complete that test.
 
The latest version will check if there is an existing p95 folder and use that instead of extracting p95 again. So if you want you can manually extract any version of p95 into a p95 subfolder and then run the script. You can also change the name of the p95 zip file to extract by editing the variable near the top of the script. Just keep in mind I only tested it with that specific version of p95.

Good question. I should add this to the readme or something... when I started testing early on I was using a range of FFT sizes, but noticed that I typically hit an error after reaching 84k FFT size. So I just set it to that as a shortcut. It could be that higher values are better though, or that different values expose different instabilities. Feel free to experiment with different values and if you are shooting for 110% stability, then setting it to a range and running for at least a couple hours on each core is something you could try.

This is true, since the cpu will reach higher boost clocks and those might not be stable with the undervolt. Actually people are even finding they need to add voltage to some cores (via a positive core offset) to be stable if they set a boost clock override >0. This is the case with my cpu where one core needs +10, another +3, but all others can keep a 0 or negative setting.


I feel you... actually part of what motivated me to share this script was to help with all the confusion created by posts that suggest setting core offsets a certain way rather than testing what specifically works with your cpu. I think part of what makes this hard is that it is possible for an unstable core offset to remain hidden in a lot of tests as it will need a single core load on that specific core to expose it.

Everyone's definition of stable is different as well. My testing is more geared to having a 24/7 reliable machine that runs at a good speed, rather than trying to reach the highest single benchmark score I can. Those are different goals as for a high score you just need things stable for long enough to complete that test.
Great job man
 
I think the script (version from 24.2.) is wrong. When I run Hwinfo, only one thread per core is being used. I guess the affinity is misconfigured.
 
I think the script (version from 24.2.) is wrong. When I run Hwinfo, only one thread per core is being used. I guess the affinity is misconfigured.

Did you change any of the variables from their defaults? There is a new setting, $use_smt=$true; If that is set to false then it will only use one thread on each core.

Check in task manager to make sure the affinity is set correctly for prime95 while it is running.
Let me know if it is not working on your system.
Thanks!
 

Attachments

  • p95_affinity.png
    p95_affinity.png
    399.9 KB · Views: 243
Last edited:
New AMD chipset driver - on x570 it seems stable P200T125E115
View attachment 187257
View attachment 187258
Hi mate
I'm new here and have been reeding about this overclocking options with the Curve Optimizer. I followed and done it on my ROG Crosshair VIII Dark Hero with Ryzen 5950x.
It seams that I am missing somenthing during the process.
I only setup PBO via the advanced options with
PPT:200
TDC:140
EDC:200
PBO Scalar: 10X
Max CPU Boost Clock Override: 200Mhz

Is stable but when I run Cinebench R23 multicore I get 28706 and the cores do not go over 4300MHz.
Temp is arond 88 Celcius

Have a couple of questions.
1. Is it possible for you to share screens of your Bios for relevant overclocking details to see if I am missing somethig.
2. With the Curve Optimizer is there a need to setup anything else like CPU Core Ratio (per ccx) or other settings in the Bios to get a 4500MHz multicore?

Regards,
 
Hi mate
I'm new here and have been reeding about this overclocking options with the Curve Optimizer. I followed and done it on my ROG Crosshair VIII Dark Hero with Ryzen 5950x.
It seams that I am missing somenthing during the process.
I only setup PBO via the advanced options with
PPT:200
TDC:140
EDC:200
PBO Scalar: 10X
Max CPU Boost Clock Override: 200Mhz

Is stable but when I run Cinebench R23 multicore I get 28706 and the cores do not go over 4300MHz.
Temp is arond 88 Celcius

Have a couple of questions.
1. Is it possible for you to share screens of your Bios for relevant overclocking details to see if I am missing somethig.
2. With the Curve Optimizer is there a need to setup anything else like CPU Core Ratio (per ccx) or other settings in the Bios to get a 4500MHz multicore?

Regards,

You need to find the curve offset settings, hidden somewhere under advanced options, amd overclocking in your bios. Then lower, and test for stability with both single core and multicore loads.
I would suggest setting Boost Clock Override back to 0. The 5950x will go up to 5050Mhz at stock.
 
Did you change any of the variables from their defaults? There is a new setting, $use_smt=$true; If that is set to false then it will only use one thread on each core.

Check in task manager to make sure the affinity is set correctly for prime95 while it is running.
Let me know if it is not working on your system.
Thanks!
This is really weird. the affinity is set correctly, but there is still load only on one of the virtual cores.
1614585037800.png

1614585014278.png



When you run p95 directly, it detects everything correctly, but when you do so from the script, apparently it does not.
 
Hi mate
I'm new here and have been reeding about this overclocking options with the Curve Optimizer. I followed and done it on my ROG Crosshair VIII Dark Hero with Ryzen 5950x.
It seams that I am missing somenthing during the process.
Try using PBO via the advanced options with
PPT:200
TDC:125
EDC:115
PBO Scalar: 2-4X
Max CPU Boost Clock Override: 200Mhz

and a curve of negative -10 and then add more negative curve until not stable and then try to change TDC and then EDC

to begin with - do note my previos bios pics - I personally also set Infinity fabric and memory to 1:1 - in my case its stable at 1900MHz - giving 3800MHz memory
 
Try using PBO via the advanced options with
PPT:200
TDC:125
EDC:115
PBO Scalar: 2-4X
Max CPU Boost Clock Override: 200Mhz

and a curve of negative -10 and then add more negative curve until not stable and then try to change TDC and then EDC

to begin with - do note my previos bios pics - I personally also set Infinity fabric and memory to 1:1 - in my case its stable at 1900MHz - giving 3800MHz memory
I have worked out most of the values for the curve with negative -15 for best 4 cores and -30 for the remaining cores.
Is stable with PPT185 TDC140 EDC140
Now what I have been noticing from the beginning is that the temp in full load when I’m compressing videos is around 90 Celcius which is too hot to keep for hours if I have a batch to run. How do I reduce the temp to something like 80s during full load?
Regards
 
I have worked out most of the values for the curve with negative -15 for best 4 cores and -30 for the remaining cores.
Is stable with PPT185 TDC140 EDC140
Now what I have been noticing from the beginning is that the temp in full load when I’m compressing videos is around 90 Celcius which is too hot to keep for hours if I have a batch to run. How do I reduce the temp to something like 80s during full load?
Regards

Set PBO temperature limit to 80, or whatever you want your max temp to be. 90c is the default, and should be fine. I have mine at 85 though. This is assuming you've already checked there is no issue with your cooling (temps ok at lower loads).

This is really weird. the affinity is set correctly, but there is still load only on one of the virtual cores.
View attachment 190457
View attachment 190456


When you run p95 directly, it detects everything correctly, but when you do so from the script, apparently it does not.

By default the script only runs a single actual thread of p95 to try and reach as high a boost clock as possible. It then assigns it to both threads on a single core and let's windows voice between them as it likes. Is this what you are seeing?
 
I don't think that's what I'm seeing. Whatever I am seeing it's wrong, because when I run prime95 manually, the load is on both threads, which I assume is the correct behaviour with SMT enabled.
 
I don't think that's what I'm seeing. Whatever I am seeing it's wrong, because when I run prime95 manually, the load is on both threads, which I assume is the correct behaviour with SMT enabled.

When you run it manually, are you limiting the number of threads that p95 will create?
By default, the script sets the number of threads to '1'

1614708517374.png
 
I set it to two, obviously. Two threads per core.

I set PBO frequency to +200MHz and when running p95, not only is the frequency not higher, it seems to be slightly lower than before (I am still testing the cores individually to have stable max boost). Is that even possible?
 
Latest beta versions of HWiNFO offer a tooltip description when you hover the pointer over a sensor.

Anyway the “Core X Clock (perf#x/x)” naming scheme means the following...

perf#x/x

The second x (/x) is the performance order of the cores hard coded into the CPU logic after its fabrication evaluation. Meaning that the cores with numbers 1, 2 can operate at higher frequency on the same voltage from cores with numbers 7, 8 if we are talking about an 8core SKU.
The first x (x/) is the order the Windows scheduler is preferring to load first and keep the loads more in single or reduced threaded apps/games. If the scheduler is “smart” enough, is trying to keep the loads on the same 4/8core CCX (depending if the CPU is 3000 or 5000) to reduce latency by avoiding CCX and CCD cross talks. And also is trying to load the higher perf# cores more. This behavior depends also on the power plan and/or the version of Windows and chipset drivers.

The core loading “amount” can be represented by 3 other things on HWiNFO sensors window.
1. The core effective speed. The higher the core effective speed the higher the load on those cores.
2. The core C-states residency. Where C0 is the active state, C1 is the halt state and C6 is the power off (sleep).
3. The core T usage (%)

Usually the discrete clock and raw multiplier readings can represent the core loading but at some points it could be misleading. Only effective clock and active/nonactive states can show this accurately.

——————————————

Keep in mind that desktop Ryzens (unlike mobile ones) can’t feed cores with individual voltage. Instead the CPU operates cores at different speed on the same voltage. The core feeding voltage is one and only, the “CPU Core Voltage (SVI2 TFN)” as HWiNFO reports.

To feed voltage individually to cores you either do it with multi VR rails but this adds high complexity and cost for the boards...
or you do it with on die core V regulators the dLDOs. At least ZEN3 has them but they are not put to use on desktop SKUs. On mobile they do use them, where power control and efficiency is essential.

EDIT: by mistake I misspell dLDOs with cLDOs...
 
Last edited:
Could that mean that undervolting with curve optimizer is poinless to set on per-core basis? Because if I can only undervolt the top one or two cores by -5 and the crappy ones by -30, I presume the controller would only go as low as -5, right?

edit:
At the same time, how is this possible then?
1614853446824.png
 
I set it to two, obviously. Two threads per core.
OK, sorry it wasn't clear. I'm intentionally only running a single thread of p95 to try and get as high a boost clock as possible. This method worked well for me, but I have not done a lot of testing with 2 threads running to see how that compares. If you want to experiment with this you can change the p95 config the script uses by editing "local.txt".

I set PBO frequency to +200MHz and when running p95, not only is the frequency not higher, it seems to be slightly lower than before (I am still testing the cores individually to have stable max boost). Is that even possible?
You should run a benchmark or check the effective clock frequencies to compare. Just a theory, but it's possible you will get a slight degradation in performance if the cpu tries to boost higher, uses more power, and then lowers the effective clocks as a result. If that happens it is likely only a small effect though.

or you do it with on die core V regulators the cLDOs. At least ZEN3 has them but they are not put to use on desktop SKUs. On mobile they do use them, where power control and efficiency is essential.
This is something I have been wondering about. There was another post somewhere saying this was actually enabled in Zen3, but I don't know if that was just speculation or not. Assuming there is no documentation or other statement from AMD that they have enabled individual core voltages on desktop then I'll continue to assume all cores run off a single voltage.

One thing I realized, if the cpu has voltage regulators on die, then are the seemingly high (1.4-1.5) voltages what is actually seen by the cores? It would explain a lot to me if the cpu voltage we are seeing is actually the supply to onboard voltage regulators and not the actual voltage that the cores run at.

Could that mean that undervolting with curve optimizer is poinless to set on per-core basis? Because if I can only undervolt the top one or two cores by -5 and the crappy ones by -30, I presume the controller would only go as low as -5, right?

edit:
At the same time, how is this possible then?
View attachment 190906
There's multiple things at play here, but the short answer is that it is not pointless to optimize on a per-core bases. At least if you want to get the last few % and as far as my understanding goes:

1. -5 on your best core might actually result in the same VID as -30 on your worst core, since each core has a different voltage curve set from the factory (and curve offset is setting an offset to the factory default).
2. Core VID in HWInfo is the voltage requested by that core. The actual voltage is going to be different to that, and assuming there is only a single voltage set for all cores it will be based on the highest voltage requested among the cores and possibly other parts of the die.
3. For a multi-core load the voltage will be set based on the highest voltage requested among the active cores. You can focus on those cores when tuning curve offset to save time, but you need to figure out which ones they really are first.


Also note that by default HWInfo will report the same VID for all cores, but will read out sensor/register values sequentially, so in your screenshot you might just be seeing the VID changing between the time it read the value for Core 0 and Core 1. There is a setting that was added in HWiNFO v6.40 which seems to fix this. If you enable this I'd expect that you will see a slightly different VID for each core:
  • Added Snapshot Polling mode for AMD Zen-based CPUs.
 
Last edited:
At this point I don't really know what I'm doing anymore, there are just too many questions and I'm totally sick of prime95 by now :D

Should I test the individual curve offsets with all other curves at default or is it perfectly fine to do so with some offsets already set?

Does the increased frequency limit even matter when (according to someone on a different forum) it adds "up to" 200MHz, meaning it's more like +100MHz with two cores and probably next to nothing with more than that running under load? Just by having programs opened and browsing the internet, I see activity on four cores most of the time.
and
Is the frequency limit of any use when I'm not overclocking in the classical way of increasing power limits, voltages etc.?

Can/does the increased frequency limit affect how much of an offset can I use?


Re: threads. I am not sure. I've always - for years - read that for HT/SMT enabled CPU, you have to run two threads, otherwise the load won't be 100%. I don't want to dig into reading about any of the technical klingon behind that, so I just do what I've been doing for years.
 
Back
Top