Ok, this has been long in the making but I managed to write a guide how to perform advanced undervolting, affecting only relevant frequencies. Unfortunately I did not have a thermally constrained device, so the tests are instead focused on how much extra 'oomph' can be gained by allowing the CPU to run faster (due to lower voltages)
https://github.com/psyq321/PowerMonkey/blob/main/docs/vfpoint_tuning.md
TL;DR - starting with Comet Lake, Intel allowed more control on V/F (Voltage / Frequency) curve - this time allowing each Voltage/Frequency point to have a custom voltage offset, which will be converted to a curve by the Pcode. OC-Unlocked Parts Only for now - but even that is better than nothing.
Why is this important? I have been suspecting that the main reason for UV instability on CML-H (and newer) systems is too much undervolting during low-power scenarios. This is because old offset control was applying the same offset to the entire V/F curve. I've seen my CML-H system getting to 0.4x volts when dropping to the lowest frequency.
If only we could do something like... this maybe?
![]()
Enter PowerMonkey 0.1.8 and - yes, above is exactly what we will do![]()
And this is what Alder Lake i9-12900K (production) can do:
![]()
No these numbers are not a joke - I actually left quite some "buffer" between the crash zone which, for interested is...
I think this says a lot about Intel's future mobile offerings... clearly there is >so< much headroom...Code:/// /// CPU: Alder Lake-S 12900K PRQ /// Autotune script: prime95_ultrashort /// /// Crash offsets (in mV) per VF point: /// /// 0.8GHz 1.8GHz 3.6GHz 4.0GHz 4.2GHz 4.8GHz 5.3GHz /// AVX512: N/A -244 -238 -225 -235 -190 N/A /// AVX2 N/A -240 -230 -214 -230 -170 N/A /// SSE N/A -250 -246 -232 -238 -186 N/A pk->planes[IACORE].vfPoint[0].VOffset = pk->planes[RING].vfPoint[0].VOffset = 0; // V_Offset (mV) @ 800 MHz pk->planes[IACORE].vfPoint[1].VOffset = pk->planes[RING].vfPoint[1].VOffset = -190; // V_Offset (mV) @ 1800 MHz pk->planes[IACORE].vfPoint[2].VOffset = pk->planes[RING].vfPoint[2].VOffset = -180; // V_Offset (mV) @ 3600 MHz pk->planes[IACORE].vfPoint[3].VOffset = pk->planes[RING].vfPoint[3].VOffset = -180; // V_Offset (mV) @ 4000 MHz pk->planes[IACORE].vfPoint[4].VOffset = pk->planes[RING].vfPoint[4].VOffset = -175; // V_Offset (mV) @ 4200 MHz pk->planes[IACORE].vfPoint[5].VOffset = pk->planes[RING].vfPoint[5].VOffset = -137; // V_Offset (mV) @ 4800 MHz pk->planes[IACORE].vfPoint[6].VOffset = pk->planes[RING].vfPoint[6].VOffset = 0; // V_Offset (mV) @ 5300 MHz
Results ??
As I did not have a notebook with unlocked CML+ CPU, I had to be happy with this - gained extra 150-200 MHz in full AVX-512 workload... so that, I can pound 12900K with the worst-case Prime95 AVX-512 workload, still being able to keep it running at >all core<!!! ~4.8 GHz clock for hours and hours without any issues...
![]()
I am very excited to see how ADL notebooks will behave.
-
Just to clarify - by "OC Unlocked" I mean SKUs usually with "K" or "X" in their name, as right now Intel allows V/F point adjustments for those models only.
In any case one needs to have "OC Lock" in NVRAM set to FALSE to access MSR 0x150 - or to have a generous BIOS with setup allowing V/F point adjustment exposed in UI (good luck with that)
So, if somebody has a laptop with 10885HK or 11980HK CPUs, this could be tested, maybe even in userspace with Intel XTU (if they support VF curve adjustment for mobile SKUs) for as long as there is no Hyper-V;
Advanced Undervolting on Comet Lake+ CPUs: V/F Point Adjustment
Discussion in 'Hardware Components and Aftermarket Upgrades' started by psyq321, Dec 20, 2021.