SkatterBencher #81: Ryzen 9 9950X Overclocked to 5900 MHz
We overclock the AMD Ryzen 9 9950X to 5900 MHz with the ASUS ROG Crosshair X670E Hero motherboard and EK water cooling.
I do this by leveraging Curve Optimizer and Curve Shaper to undervolt the VFT curve of both CCDs. In this guide, I break down the tuning process into four unique overclocking strategies for beginner and advanced overclockers.
- First, we enable Precision Boost Overdrive 2 and EXPO.
- Second, we tune Precision Boost Overdrive 2 with Curve Optimizer
- Third, we tune the memory timings.
- Lastly, we try to maximize performance with Curve Shaper.
However, before we jump into overclocking, let us quickly review the hardware and benchmarks used in this video.
Table of Contents
AMD Ryzen 9 9950X: Introduction
The AMD Ryzen 9 9950X is part of AMD’s Zen 5-based Ryzen 9000 desktop processor product line codenamed “Granite Ridge.” The Granite Ridge processors were introduced on June 2, 2024, during Computex 2024.
The Ryzen 9 9950X succeeds the 16-core Zen 4 Ryzen 9 7950X which we overclocked to 5.95 GHz in SkatterBencher #45. It has a base clock of 4.3 GHz and a listed boost frequency of up to 5.7 GHz. Just like its predecessor, its TDP is 170W.
Platform Overview
The system we’re overclocking today consists of the following hardware.
Item | SKU | Price (USD) |
CPU | AMD Ryzen 9 9950X | 625 |
Motherboard | ASUS ROG Crosshair X670E Hero | 579 |
CPU Cooling | EK-Quantum Velocity² EK-Pro QDC Kit P360 | 150 |
Memory | G.SKILL Trident Z5 DDR5-6400 32GB | 110 |
Power Supply | Enermax MAXREVO 1500W | |
Graphics Card | ASUS ROG Strix RTX 2080 TI | 490 |
Storage | AORUS RGB 512 GB M.2-2280 NVME | |
Chassis | Open Benchtable V2 | 200 |
Telemetry | ElmorLabs EFC-SB | 50 |
ElmorLabs EFC-SB SkatterBencher Edition
The EFC-SB is a customized version of the original ElmorLabs Easy Fan Controller. It has the same functions and features as the original EFC, with a tiny improvement here and there. The most obvious difference is that this EFC version comes in the SkatterBencher color scheme: yellow, white, and black.
You can support me directly by purchasing one at the ElmorLabs online web store: link
I use the EFC-SB to monitor the ambient temperature (EFC), water temperature (EFC), and fan duty cycle (EFC). I also use the device to map the radiator fan curve to the water temperature. The main takeaway from this configuration is that it gives us a good indicator of whether the cooling solution is saturated.
Benchmark Software
We use Windows 11 (23H2 + KB5041587) and the following benchmark applications to measure performance and ensure system stability.
BENCHMARK | LINK |
Pyprime 2.0 | https://github.com/mbntr/PYPrime-2.x |
7-Zip 19.0 | https://www.7-zip.org/ |
IndigoBench | https://www.indigorenderer.com/indigobench |
Geekbench 6 | https://www.geekbench.com/ |
Geekbench AI | https://www.geekbench.com/ai/ |
Cinebench 2024.1 | https://www.cpuid.com/softwares/cpu-z.html |
CPU-Z | https://www.cpuid.com/softwares/cpu-z.html |
V-Ray 6 | https://www.chaosgroup.com/vray/benchmark |
Corona Benchmark | https://ai-benchmark.com/ |
AI-Benchmark | https://ai-benchmark.com/ |
Y-Cruncher | http://www.numberworld.org/y-cruncher/ |
3DMark CPU Profile | https://www.3dmark.com/ |
3DMark Night Raid | https://www.3dmark.com/ |
3DMark Solar Bay | https://www.3dmark.com/ |
Returnal | https://store.steampowered.com/app/750920/Shadow_of_the_Tomb_Raider_Definitive_Edition/ |
Shadow of the Tomb Raider | https://store.steampowered.com/app/750920/Shadow_of_the_Tomb_Raider_Definitive_Edition/ |
Final Fantasy XV | http://benchmark.finalfantasyxv.com/na/ |
OCCT | https://www.ocbase.com/ |
AIDA64 | https://www.aida64.com/ |
AMD Ryzen 9 9950X: Stock Performance
Before starting overclocking, we must check the system performance at default settings. The default Precision Boost 2 parameters for the Ryzen 9 9950X are as follows:
Here is the benchmark performance at stock:
- PYPrime 32B: 225.316 seconds
- 7-Zip: 220,256 mips
- IndigoBench (Bedroom): 5.587 MSamples/sec
- Geekbench 6 (single): 3,348 points
- Geekbench 6 (multi): 19,391 points
- Geekbench AI ONNX CPU SP: 5,378 points
- Geekbench AI ONNX CPU HP 1,372 points
- Geekbench AI ONNX CPU Q: 6,562 points
- Cinebench 2024 Single: 134 points
- Cinebench 2024 Multi: 2,167 points
- CPU-Z V17.01.64 Single: 864.5 points
- CPU-Z V17.01.64 Multi: 17,658.5 points
- V-Ray 5: 49,284 samples
- Corona 10: 15.258 MRays/s
- AI Benchmark: 7,242 points
- Y-Cruncher Pi 5B: 119.363 sec
- 3DMark Night Raid: 88,755 marks
- 3DMark Solar Bay: 68,988 marks
- Returnal: 109 fps
- Tomb Raider: 203 fps
- Final Fantasy XV: 178.74 fps
Here are the 3DMark CPU Profile scores at stock:
- CPU Profile 1 Thread: 1,299 pts
- CPU Profile 2 Threads: 2,581 pts
- CPU Profile 4 Threads: 5,047 pts
- CPU Profile 8 Threads: 9,448 pts
- CPU Profile 16 Threads: 17,606 pts
- CPU Profile Max Threads: 17,163 pts
Here are the AIDA64 memory benchmark scores at stock:
- Memory Read Bandwidth: 59,413 MB/sec
- Memory Write Bandwidth: 63,339 MB/sec
- Memory Copy Bandwidth: 56,509 MB/sec
- Memory Latency: 90.0 ns
When running the OCCT CPU AVX2 Stability Test, the average CPU core effective clock is 4346 MHz with 0.988 volts. The average CPU temperature is 77.5 degrees Celsius. The average CPU package power is 181.4 watts.
When running the OCCT CPU SSE Stability Test, the average CPU core effective clock is 4836 MHz with 1.083 volts. The average CPU temperature is 81.5 degrees Celsius. The average CPU package power is 196.8 watts.
Of course, we can increase the maximum power consumption limit using Precision Boost Overdrive. That’s what we’ll do in our first overclocking strategy.
However, before we get going, make sure to locate the CMOS Clear button. Pressing the Clear CMOS button will reset all your BIOS settings to default, which is helpful if you want to start your BIOS configuration from scratch.
OC Strategy #1: PBO + EXPO
In our first overclocking strategy, we simply take advantage of enabling AMD Precision Boost Overdrive 2 and AMD EXPO.
Precision Boost Overdrive 2
With the launch of Zen 5, AMD introduced a further improved version of the Precision Boost Overdrive overclocker’s toolkit, allowing for manual tuning of the parameters affecting the Precision Boost 2 frequency boost algorithm.
The Precision Boost Overdrive 2 toolkit for Zen 5 Ryzen processors includes the overclocking knobs from Zen+ (PPT, TDC, EDC), Zen 2 (Boost Override and Scalar), Zen 3 (Curve Optimizer), and the newly announced Curve Shaper for Zen 5.
There are three levels of Precision Boost Overdrive
- AMD’s stock values, which can be set by disabling PBO
- The motherboard vendor values, which are programmed into the BIOS to match the motherboard VRM specification and can be set by enabling PBO
- Custom values, which can be programmed by the end-user
In this overclocking strategy, we’re just enabling Precision Boost Overdrive, whereas, in the following strategies, we’ll explore tuning the parameters. By enabling Precision Boost Overdrive, we rely on the motherboard pre-programmed PBO parameters. We find that the following values have changed:
Increasing the PPT and, to a lesser extent, the TDC and EDC limit will help unleash the frequency in multi-threaded workloads previously limited by the PPT.
EXPO – Extended Profiles for Overclocking
EXPO stands for AMD Extended Profiles for Overclocking. It is an AMD technology that enables ubiquitous memory overclocking for AMD platforms supporting DDR5 memory.
EXPO allows memory vendors such as G.SKILL to program higher performance settings onto the memory sticks. If the motherboard supports EXPO, you can enable higher performance with a single BIOS setting. So, it saves you lots of manual configuration.
BIOS Settings & Benchmark Results
Upon entering the BIOS
- Go to the Extreme Tweaker menu
- Set Ai Overclock Tuner to EXPO II
- Enter the Precision Boost Overdrive submenu
- Set Precision Boost Overdrive to enabled
Then save and exit the BIOS.
After applying the BIOS settings, the boost frequency at 1 active thread is about 5531 MHZ and the average boost frequency gradually trails off to 5046 MHz when all cores are active. In a light single-threaded workload, all but one core in CCD0 can boost to over 5.7 GHz and all cores in CCD1 boost over 5.5 GHz.
We re-ran the benchmarks and checked the performance increase compared to the default operation.
- Geomean: +4.00%
- PYPrime 32B: +14.98%
- 7-Zip: +6.68%
- IndigoBench (bedroom): +7.27%
- Geekbench 6 (single): +2.84%
- Geekbench 6 (multi): +16.39%
- Geekbench AI (ONNX SP): +12.05%
- Geekbench AI (ONNX HP): +7.87%
- Geekbench AI (ONNX Q): +10.64%
- Cinebench 2024 Single: +3.73%
- Cinebench 2024 Multi: +9.37%
- CPU-Z V17.01.64 Single: +2.75%
- CPU-Z V17.01.64 Multi: +1.70%
- V-Ray 5: +6.70%
- Corona 10: +6.04%
- AI Benchmark: +13.23%
- Y-Cruncher PI 5B: +13.23%
- 3DMark Night Raid: +1.26%
- 3DMark Solar Bay: +0.38%
- Returnal: +0.92%
- Tomb Raider: +0.99%
- Final Fantasy XV: +0.27%
Here are the 3DMark CPU Profile scores:
- CPU Profile 1 Thread: +0.85%
- CPU Profile 2 Threads: +0.81%
- CPU Profile 4 Threads: +0.63%
- CPU Profile 8 Threads: +0.72%
- CPU Profile 16 Threads: +2.42%
- CPU Profile Max Threads: +4.37%
Here are the AIDA64 memory benchmark scores:
- Memory Read Bandwidth: +38.57%
- Memory Write Bandwidth: +35.55%
- Memory Copy Bandwidth: +30.72%
- Memory Latency: +20.00%
As we typically see with the high-end SKUs of a product line, the performance is restricted by the power limits. By enabling PBO, we can add about 40% extra power budget in all-core workloads. Combined with enabling higher memory speeds it translates into pretty decent performance gains across the board. The Geomean benchmark performance improvement is +4.00%, and we get a maximum improvement of +14.98% in PyPrime.
When running the OCCT CPU AVX2 Stability Test, the average CPU core effective clock is 4706 MHz with 1.057 volts. The average CPU temperature is 95.1 degrees Celsius. The average CPU package power is 242.3 watts.
When running the OCCT CPU SSE Stability Test, the average CPU core effective clock is 5019 MHz with 1.125 volts. The average CPU temperature is 95.1 degrees Celsius. The average CPU package power is 241.6 watts.
OC Strategy #2: PBO Tuned & Curve Optimized
In our second overclocking strategy, we tune the Ryzen 9 9950X’s Precision Boost dynamic frequency technology and undervolt our processor using the Precision Boost Overdrive 2 toolkit.
PBO 2: Fmax Boost Override
Fused maximum frequency, or Fmax, is one of the Precision Boost 2 infrastructure limiters constraining the CPU performance. The limiter determines the maximum allowed processor frequency across all CPU cores inside your CPU. On dual-CCD processors like the Ryzen 9 9950X, each CCD will have its own Fmax. For the Ryzen 9 9950X, the Fmax of CCD0 is 5750 MHz and the Fmax for CCD1 is 5450 MHz.
Boost Clock Override or Fmax Override is one of the tools available in the PBO 2 overclocker’s toolkit. It allows the user to override the arbitrary clock frequency limit between -1000 MHz and +200 MHz in steps of 25 MHz. It’s important to note that the Fmax override only adjusts the upper ceiling of the frequency and doesn’t act as a frequency offset. Ultimately, the Precision Boost 2 algorithm still determines the actual operating frequency.
With a +200 Fmax Boost Override, the new maximum boost frequency for the Ryzen 9 9950X is 5950 MHz for CCD0 and 5650 MHz for CCD1.
PBO 2: Scalar
Scalar is a tool that allows the user to override the warranted silicon stress level, or FIT, to achieve higher frequency. You can adjust the maximum allowed FIT level to 10 times higher than the factory-fused limit. While the tool offers precise granularity, typically, you’ll find the available options to range between 1X and 10X in steps of 1 multiple.
The effect of increasing Scalar is that the Precision Boost algorithm more aggressively pursues higher voltages as it is less concerned with CPU lifespan. The tool’s relevance shifts from architecture to architecture as the FIT is only one of the Precision Boost infrastructure limiters managing the maximum allowed voltage.
For the Zen 5 Granite Ridge processors, Scalar is making a comeback in the overclocking strategies because the chips are very voltage limited. The programmed VID limit is 1.4V, though we see slight excursions above that in really light single-threaded workloads. When all 16 cores are active, the maximum voltage is 1.345V.
The programmed FIT value of this particular Ryzen 9 9950X is 6838.1. So, with a 10X scalar, the new FIT value is 68381. We find that in an all-core workload, the maximum voltage increased from 1.345V to 1.370V. That’s not a big increase, but in voltage-constraint scenarios, every little bit helps!
PBO 2: Curve Optimizer
Curve Optimizer has been one of the most important overclocking tools of the Precision Boost Overdrive 2 toolkit. It is most commonly known for its undervolting capabilities. However, on AMD Ryzen CPUs, it also works as an overclocking tool.
To explain how it works, Let’s start with the basics: the voltage-frequency curve.
Simply put: a voltage-frequency curve describes the relationship between an operating frequency and the voltage required to operate at that frequency. Every modern SOC has a factory-fused voltage-frequency curve and uses this to dynamically adjust the power consumption depending on the workload needs.
Here’s the default voltage-frequency curve of my Ryzen 9 9950X processor. You’ll notice that there are in fact two curves. That’s because the Ryzen 9 9950X has two CCDs of quite different quality.
We can immediately make a simple and redundant observation: the higher the frequency, the higher the voltage. For example: CCD0 requires only 1.1V for 4925 MHz. However, we need over 1.25V for 5475 MHz. This also applies to CCD1: 1.1V gets us 4.65 GHz whereas we need 1.25V for 5200 MHz.
I must make an important sidenote here: the native V/F curve for CCD1 is not as bad as it is portrayed in this chart. Instead, it is the effect of the CCDs sharing the same voltage rail and having linked Fmax frequencies. If we disable CCD0 and reassess V/F curve of CCD1, we find that CCD1 is able to run the high frequencies at much lower voltages. At 5.3 GHz, we even need about 100 mV less! Of course, CCD1 is still not at the same level as CCD0.
We also notice that the maximum allowed voltage is 1.35V when all cores are active. We can increase this to 1.375V by setting a 10X Scalar. The Precision Boost 2 algorithm utilizes the V/F curve to find what’s the maximum possible frequency at 1.375V. With the default curve, that’s 5600 MHz for CCD0 and 5450 MHz for CCD1. However, as I showed a little earlier, we can use the Fmax Boost Override tool to increase the Fmax limit by another 200 MHz.
If we set a negative Curve Optimizer, we can shift the entire voltage-frequency curve along the voltage axis. And, suddenly, we need less voltage for every operating frequency.
For example, for 5 GHz we needed about 1.110V on CCD0 and 1.175V on CCD1. But with a negative Curve Optimizer, now we only need 1.066V on CCD0 and 1.120V on CCD1!
Moreover, the frequency is also boosting higher! The highest frequency with all sixteen cores active has increased by 100 MHz from 5630 MHz to 5730 MHz on CCD0. These higher frequencies are now possible because our Curve Optimizer undervolting pulled them below the 1.375V threshold.
Curve Optimizer is a powerful tuning tool. It’s simple but not simplistic. And the more you dig into the details of what it does, the more intricate it becomes to figure out how to apply it in a daily overclock.
The traditional overclocking approach for AMD Ryzen CPUs is to undervolt by setting a negative curve optimizer. That helps in two ways.
- First, undervolting lowers the operating voltage, temperature, and power consumption.
- Second, as a consequence, the Precision Boost 2 algorithm can leverage the additional headroom to boost to higher frequencies.
So, you tend to get lower temperatures and extra performance. It’s a win-win. However, there are a couple of caveats to tuning with Curve Optimizer:
- Curve Optimizer impacts the entire voltage-frequency curve. So, it affects stability across the entire range of operating frequencies: from 600 to 6000 MHz.
- The same Curve Optimizer value impacts differently across the curve
Of course, having a CPU with two CCDs like the Ryzen 9 9950X which each have their own V/F curve makes the tuning process less straightforward than with CPUs that have a single CCD.
Curve Optimizer is available on a per CPU, per CCD, and per Core basis.
Curve Optimizer Tuning Process
The manual tuning process for Curve Optimizer can become quite convoluted since it affects the CPU core voltage in all scenarios ranging from light single-threaded workloads to heavy all-core workloads. Furthermore, for dual-CCD CPUs like the Ryzen 9 9950X, we have to tune two curves independently.
I want to emphasize this point a little further because I often see comments from people who struggle with Curve Optimizer. The typical issue would be that the Curve Optimizer value was determined by using a heavy all-core stress test like OCCT or Prime95. However, then later you’d find out the system was unstable in a gaming workload.
It’s a common mistake to exclusively rely on those kinds of stress tests for Curve Optimization. That’s because you effectively only stress-test a specific point on the VFT curve. That point is usually a low voltage with medium frequency and high temperature. However, that’s an atypical operating point because most workloads – including games – don’t run there.
To better illustrate my point, here are the final V/F curves of this OC Strategy. Then I’ll add the voltage-frequency points during three workloads: Final Fantasy XV, the OCCT AVX2 CPU stress test, and the Y-Cruncher BKT component stress test. You can see not only do the points diverge significantly from the V/F curve, but they’re also at totally different parts of the curve.
OCCT MEM | FFX15 | OCCT AVX2 | YC BKT | |
CLK | 5176 | 5523 | 4798 | 5352 |
VOLT | 1.17 | 1.34 | 1.03 | 1.24 |
TEMP | 57 | 69 | 95 | 95 |
The average frequency-voltage-temperature during Final Fantasy XV is 5.5 GHz with 1.34V at 69 degrees Celsius. In contrast, the OCCT AVX2 stress test runs at 4.8 GHz with 1.03V at 95 degrees Celsius. Obviously, we cannot verify game stability by running the stress test.
Furthermore, although the Y-Cruncher BKT also runs at 95 degrees Celsius, it’s at a much higher frequency than the OCCT workload and thus stress tests a totally different part of the VF curve.
I find that the easiest way to approach curve optimization is to find the weak spot of the curve. That can vary between architectures and even chips. In my case, I found that the Y-Cruncher BKT workload was always the first to fail when undervolting with Curve Optimizer.
BKT is a relatively light workload as it runs integer operations on all cores. This pushes the effective clock quite high up the V/F curve and stress tests high operating frequencies and temperature. After adjusting the Curve Optimizer such that the BKT workload was stable, I also ran all other benchmarks and stress tests, and the system appeared stable.
With this Ryzen 9 9950X, I could set a curve optimizer of -15 for CCD0 and -10 for CCD1.
BIOS Settings & Benchmark Results
Upon entering the BIOS
- Go to the Extreme Tweaker menu
- Set Ai Overclock Tuner to EXPO II
- Switch to the Advanced menu
- Enter the AMD Overclocking submenu and click accept
- Enter the Precision Boost Overdrive submenu
- Set Precision Boost Overdrive to Advanced
- Set PBO Limits to Motherboard
- Set Precision Boost Overdrive Scalar Ctrl to Manual
- Set Precision Boost Overdrive Scalar to 10X
- Set CPU Boost Clock Override to Enabled (Positive)
- Set Max CPU Boost Clock Override to 200
- Enter the Curve Optimizer submenu
- Set Curve Optimizer to Per CCD
- Set CCD0 Curve Optimizer Sign to Negative
- Set CCD0 Curve Optimizer Magnitude to 15
- Set CCD1 Curve Optimizer Sign to Negative
- Set CCD1 Curve Optimizer Magnitude to 10
- Set Curve Optimizer to Per CCD
- Enter the Precision Boost Overdrive submenu
Then save and exit the BIOS.
After applying the BIOS settings, the boost frequency at 1 active thread is about 5582 MHZ and the average boost frequency gradually trails off to 5204 MHz when all cores are active. In a light single-threaded workload, all cores in CCD0 can boost to over 5.8 GHz and all cores in CCD1 boost over 5.6 GHz.
We re-ran the benchmarks and checked the performance increase compared to the default operation.
- Geomean: +5.15%
- PYPrime 32B: +16.54%
- 7-Zip: +8.63%
- IndigoBench (bedroom): +8.20%
- Geekbench 6 (single): +3.46%
- Geekbench 6 (multi): +16.73%
- Geekbench AI (ONNX SP): +12.07%
- Geekbench AI (ONNX HP): +9.26%
- Geekbench AI (ONNX Q): +12.94%
- Cinebench 2024 Single: +3.73%
- Cinebench 2024 Multi: +10.48%
- CPU-Z V17.01.64 Single: +4.27%
- CPU-Z V17.01.64 Multi: +3.71%
- V-Ray 5: +9.52%
- Corona 10: +8.35%
- AI Benchmark: +15.45%
- Y-Cruncher PI 5B: +9.83%
- 3DMark Night Raid: +1.57%
- 3DMark Solar Bay: +0.75%
- Returnal: +0.92%
- Tomb Raider: +1.48%
- Final Fantasy XV: +0.76%
Here are the 3DMark CPU Profile scores:
- CPU Profile 1 Thread: +0.85%
- CPU Profile 2 Threads: +0.81%
- CPU Profile 4 Threads: +0.63%
- CPU Profile 8 Threads: +0.72%
- CPU Profile 16 Threads: +2.42%
- CPU Profile Max Threads: +4.37%
Here are the AIDA64 memory benchmark scores:
- Memory Read Bandwidth: +38.57%
- Memory Write Bandwidth: +35.55%
- Memory Copy Bandwidth: +30.72%
- Memory Latency: +20.00%
By adjusting the Fmax Boost Override, Scalar, and Curve Optimizer, we both undervolt and overclock both CCDs of this Ryzen 9 9950X. The performance improvement is noticeable, especially in the multi-threaded workloads. However, we also get a small performance lift in single-threaded workloads. The Geomean benchmark performance improvement is +5.15%, and we get a maximum improvement of +16.54% in the AI Benchmark.
When running the OCCT CPU AVX2 Stability Test, the average CPU core effective clock is 4844 MHz with 1.041 volts. The average CPU temperature is 95.1 degrees Celsius. The average CPU package power is 242.5 watts.
When running the OCCT CPU SSE Stability Test, the average CPU core effective clock is 5137 MHz with 1.117 volts. The average CPU temperature is 95.1 degrees Celsius. The average CPU package power is 242.1 watts.
OC Strategy #3: Memory Tuned
In our third overclocking strategy, we delve into tuning the memory subsystem performance.
On AMD Granite Ridge processors, the memory subsystem consists of three major parts: the infinity fabric, the unified memory controller, and the system memory. They’re more commonly referred to as the FCLK, UCLK, and MCLK.
First-generation Ryzen overclockers know that these parts used to coupled together, but on modern Ryzen processors like the Ryzen 9 9950X, we can tune them independently. There were three things I wanted to address with memory subsystem performance optimization.
- I want to increase the FCLK as high as possible,
- I want to run the UCLK and MCLK in sync, and
- I want to tighten up the memory timings.
Infinity Fabric Tuning
The Fabric frequency, or FCLK, is generated by the SOC PLL, derived from a 100 MHz reference clock input. The reference clock is multiplied by the FCLK ratio, which you can configure in the BIOS.
The standard operating frequency of the infinity fabric is 1800 MHz, but on many boards, you’ll find it runs 2100 MHz when Precision Boost Overdrive is enabled.
That said, it doesn’t seem there’s much overclocking headroom beyond 2100 MHz. I managed to set 2200 MHz, and it booted up. However, it was not stable across the entire benchmark suite. Not even with voltage adjustments.
Speaking of voltage: the infinity fabric voltage is provided by the VDDG voltage supply, derived via an integrated voltage regulator from the VDDCR_MISC voltage rail. There is a total of four VDDG voltage rails available for manual adjustment:
- CCD0-CCD VDDG: signals sent from CCD0 to IOD are sent at this voltage
- CCD0-IOD VDDG: signals sent from IOD to CCD0 are sent at this voltage
- CCD1-IOD VDDG: signals sent from IOD to CCD0 are sent at this voltage
- CCD1-CCD VDDG: signals sent from CCD0 to IOD are sent at this voltage
Memory Controller Tuning
Note that the VDDG voltage does not adjust automatically with VDDCR_MISC. So, if you need to increase VDDG, for example, to support higher memory frequency, you need to change it manually.
AMD Granite Ridge has two DDR5 Unified Memory Controllers, or UMC in short and each provides two 32-bit memory channels. The memory controllers are located in the IO die and are identical to the memory controllers on Ryzen 7000 “Raphael” processors. (Note that Ryzen 8000 “Hawk Point” processors actually have a newer memory controller!).
The Unified Memory Controller frequency, or UCLK, is derived from the UMCCLK, one of the SOC PLLs. The UMCCLK is driven by a 100 MHz reference clock derived from either an internal or external clock generator.
The memory controller frequency is tied directly to the system memory frequency. It can run either at the same or half its frequency. At default, the memory controller runs at the same frequency as the system memory at 2400 MHz. However, we find that when enabling EXPO, often the motherboard auto-rules will drop the memory controller frequency to half the memory frequency.
We can easily force the memory controller to run at the same frequency as the system memory by setting UCLK DIV1 Mode to UCLK=MEMCLK. I also suggest enabling SoC/Uncore OC mode to disable all power-saving technologies affecting the clock frequencies of the memory subsystem.
The VDDCR_SOC voltage rail provides the external power for multiple internal voltage regulators on SOC for the various IP blocks, including the memory controller. The VDDIO_MEM voltage rail is related as it provides the external power for the VDDP DDR5 bus signaling.
It is essential to know that the VDDCR_SOC voltage must always be lower than VDDIO_MEM_S3 + 100mV. The default VDDCR_SOC voltage is 1.05V and can be set to 1.30V under ambient conditions. However, we need LN2 mode enabled for higher voltages.
System Memory Timings Tuning
The last piece of the memory subsystem performance tuning is tuning the memory timings. For this part, I rely in part on ASUS’ Memory Presets technology and in part on previous SkatterBencher overclocking guides.
ASUS Memory Presets
ASUS Memory Presets is an ASUS overclocking technology that provides a selection of memory-tuning presets for specific memory ICs. The presets will adjust the memory timings and voltages.
The ROG Crosshair X670E Hero motherboard sports fourteen memory profiles for a variety of memory ICs and configurations. Since we’re interested in simply adjusting the memory timings, we can try the Hynix 6400MHz 1.4V 2x16GB SR preset. Note that I stick with the EXPO primary timings and only leverage the memory preset for the secondary and tertiary sub-timings.
Memory Timings Tuning
Regular viewers will know I tried this memory profile in previous Hawk Point and Granite Ridge SkatterBencher guides. In those guides, the memory profile wasn’t entirely stable without further adjustments. That’s also the case for this system as the kit can pass the benchmarks at DDR5-6400, but it’s not stable enough to pass the OCCT memory stability test.
However, we passed the OCCT memory stability test by reducing the memory frequency by one notch to DDR5-6200. Note that we still rely on the EXPO profile for the voltage configuration and the ASUS Memory Preset for the sub-timing configuration.
After the tuning, our AIDA64 performance improves significantly. We got about +35% extra performance by enabling EXPO and added another 10% on top of that by tuning the memory timings.
BIOS Settings & Benchmark Results
Upon entering the BIOS
- Go to the Extreme Tweaker menu
- Set Ai Overclock Tuner to EXPO II
- Set Memory Frequency to DDR5-6200
- Enter the DRAM Timing Control submenu
- Enter the Memory Presets submenu
- Select Load Hynix 6400MHz 1.4V 2x16GB SR and click OK
- Leave the Memory Presets submenu
- Set Tcl, Trccd, and Tras according to the EXPO kit
- Set Tras to 38
- Enter the Memory Presets submenu
- Leave the DRAM Timing Control submenu
- Switch to the Advanced menu
- Enter the AMD Overclocking submenu and click accept
- Enter the DDR and Infinity Fabric Frequency/Timings submenu
- Enter the Infinity Fabric Frequency and Dividers submenu
- Set Infinity Fabric Frequency and Dividers to 2100 MHzSet UCLK DIV1 MODE to UCLK=MEMCLK
- Set Precision Boost Overdrive to AdvancedSet PBO Limits to MotherboardSet Precision Boost Overdrive Scalar Ctrl to Manual
- Set Precision Boost Overdrive Scalar to 10X
- Set Max CPU Boost Clock Override to 200
- Set Curve Optimizer to Per CCD
- Set CCD0 Curve Optimizer Sign to NegativeSet CCD0 Curve Optimizer Magnitude to 15Set CCD1 Curve Optimizer Sign to NegativeSet CCD1 Curve Optimizer Magnitude to 10
- Set SoC/Uncore OC Mode to Enabled
- Enter the Infinity Fabric Frequency and Dividers submenu
- Enter the SoC Voltage submenu
- Set SoC Voltage to 1300
- Enter the DDR and Infinity Fabric Frequency/Timings submenu
Then save and exit the BIOS.
After applying the BIOS settings, the boost frequency at 1 active thread is about 5582 MHZ and the average boost frequency gradually trails off to 5204 MHz when all cores are active. In a light single-threaded workload, all cores in CCD0 can boost to over 5.8 GHz and all cores in CCD1 boost over 5.6 GHz.
We re-ran the benchmarks and checked the performance increase compared to the default operation.
- Geomean: +6.49%
- PYPrime 32B: +38.66%
- 7-Zip: +12.31%
- IndigoBench (bedroom): +10.26%
- Geekbench 6 (single): +5.62%
- Geekbench 6 (multi): +23.44%
- Geekbench AI (ONNX SP): +13.65%
- Geekbench AI (ONNX HP): +9.33%
- Geekbench AI (ONNX Q): +14.39%
- Cinebench 2024 Single: +7.46%
- Cinebench 2024 Multi: +17.58%
- CPU-Z V17.01.64 Single: +4.35%
- CPU-Z V17.01.64 Multi: +3.46%
- V-Ray 5: +11.68%
- Corona 10: +10.10%
- AI Benchmark: +22.44%
- Y-Cruncher PI 5B: +21.71%
- 3DMark Night Raid: +1.70%
- 3DMark Solar Bay: +0.27%
- Returnal: +0.92%
- Tomb Raider: +0.99%
- Final Fantasy XV: +2.09%
Here are the 3DMark CPU Profile scores:
- CPU Profile 1 Thread: +2.00%
- CPU Profile 2 Threads: +1.78%
- CPU Profile 4 Threads: +1.84%
- CPU Profile 8 Threads: +1.96%
- CPU Profile 16 Threads: +3.39%
- CPU Profile Max Threads: +6.98%
Here are the AIDA64 memory benchmark scores:
- Memory Read Bandwidth: +47.72%
- Memory Write Bandwidth: +44.82%
- Memory Copy Bandwidth: +40.33%
- Memory Latency: +38.04%
We know from previous Ryzen 9000 overclocking guides that memory sub-timing tuning can have a substantial impact on performance. And that’s no different with the Ryzen 9 9950X, even though the performance uplift is less outspoken. We get a satisfactory performance uplift across the board. The Geomean benchmark performance improvement is +6.49%, and we get a maximum improvement of +38.66% in PyPrime.
OC Strategy #4: PBO Curve Shaped
In our fourth and final overclocking strategy, we take advantage of Curve Shaper and try to squeeze a little more frequency out of our CPU.
Curve Shaper Theory
Curve Shaper is the newly announced tool of the Precision Boost Overdrive 2 toolkit. It was introduced alongside the Zen 5 Ryzen 9000 “Granite Ridge” processors. I had an in-depth look at the tool in different blog posts on this website.
In theory, it seems Curve Shaper is pretty straightforward: you get fifteen additional tunable points across the V/F curve. But the devil is in the details because AMD’s Precision Boost 2 technology doesn’t really work with V/F points. So, instead of getting a list of specific tunable V/F points, we get five regions and three temperatures:
Regions:
- Minimum frequency (“idle”)
- Low frequency (“background tasks”)
- Medium frequency (“high core count workloads”)
- High frequency (“gaming workloads”)
- Max frequency (“1T workloads”)
Temperatures:
- Low temperature (“idle”) = -5°C
- Medium temperature (“1T gaming workloads”) = 50°C
- High temperature (“stress test workloads”) = 90°C
The regions have a bit of a vague terminology and are not clearly defined. I will get back to that in a minute. The temperature points are more straightforward as they’re defined as -5, 50, and 90 degrees Celsius.
The idea of Curve Shaper is that you can adjust the voltage-frequency curve in more specific areas than with Curve Optimizer. In practice, I’ve shown it is incredibly effective for overclocking strategies with asynchronous ECLK. I’ve also shown its use in scenarios where the temperature delta spans -50 to +90 degrees Celsius.
For this video, I wanted to achieve two things:
- First, I want to illustrate how Curve Shaper works in tandem with Curve Optimizer.
- Two, I want to check if there are performance improvement opportunities in more specific load or temperature scenarios.
Curve Shaper Tuning Process
So as the basis for this overclocking strategy, I rely on the settings from OC Strategy #3 with Curve Optimizer set to -15 for CCD0 and -10 for CCD1.
Then, I try setting the Curve Shaper for Medium Temperatures to negative 5, starting with Maximum frequency. This setting further undervolts the CPU in idle and light load scenarios. Unfortunately, it wasn’t stable. I also tried setting the Medium and High Frequency Medium Temperature to negative values but that wasn’t stable either.
Then, I try the same for the High Temperatures to see if there’s any frequency margin under full load conditions. Here I found there’s enough margin to set a negative 5 Curve Shaper. In theory, this should give us a little more performance in high-load scenarios. As you’ll see in a minute, it did improve the performance slightly.
To illustrate how Curve Shaper builds on top of Curve Optimizer, I want to share two V/F curves.
In the first graph, we compare the curves from OC Strategy #3 and OC Strategy #4 by using my standard methodology. The methodology relies on using the OCCT memory stress test to keep the cores fully active, however the temperature is only about 50 degrees Celsius. We can see there’s only a slight shift in the curve.
For example, 5325 MHz with CCD0 takes 1.132V with just Curve Optimizer. But with an additional Curve Shaper, it’s 7mV lower at 1.125V. The same applies to CCD0: we get 5.35 GHz at 1.281V with Curve Optimizer and 14mV lower at 1.267V with the additional Curve Shaper.
In the second graph, we compare the curves from OC Strategy #3 and OC Strategy #4 but using the Y-Cruncher BKT workload. This workload is still relatively light as it doesn’t push the CPU to its TjMax, however, the operating temperature is around 80 degrees Celsius.
5325 MHz with CCD0 takes 1.150V with just Curve Optimizer. But with an additional Curve Shaper, it’s 20mV lower at 1.130V. The same applies to CCD0: we get 5.35 GHz at 1.230V with Curve Optimizer but it’s 25mV lower at 1.205V with the additional Curve Shaper.
So, the key takeaway is that with the High Temperature Curve Shaper we’re getting more undervolt at hotter parts of the VFT curve.
BIOS Settings & Benchmark Results
Upon entering the BIOS
- Go to the Extreme Tweaker menu
- Set Ai Overclock Tuner to EXPO II
- Set Memory Frequency to DDR5-6200
- Enter the DRAM Timing Control submenu
- Enter the Memory Presets submenu
- Select Load Hynix 6400MHz 1.4V 2x16GB SR and click OK
- Leave the Memory Presets submenu
- Set Tcl, Trccd, and Tras according to the EXPO kit
- Set Tras to 38
- Enter the Memory Presets submenu
- Leave the DRAM Timing Control submenu
- Switch to the Advanced menu
- Enter the AMD Overclocking submenu and click accept
- Enter the DDR and Infinity Fabric Frequency/Timings submenu
- Enter the Infinity Fabric Frequency and Dividers submenu
- Set Infinity Fabric Frequency and Dividers to 2100 MHzSet UCLK DIV1 MODE to UCLK=MEMCLK
- Set Precision Boost Overdrive to AdvancedSet PBO Limits to MotherboardSet Precision Boost Overdrive Scalar Ctrl to Manual
- Set Precision Boost Overdrive Scalar to 10X
- Set Max CPU Boost Clock Override to 200
- Set Curve Optimizer to Per CCD
- Set CCD0 Curve Optimizer Sign to NegativeSet CCD0 Curve Optimizer Magnitude to 15Set CCD1 Curve Optimizer Sign to NegativeSet CCD1 Curve Optimizer Magnitude to 10
- For Medium, High, and Max Frequency, set High Temperature to EnableFor Medium, High, and Max Frequency, set temperature Signs to NegativeFor Medium, High, and Max Frequency, set temperature Magnitudes to 5
- Set SoC/Uncore OC Mode to Enabled
- Enter the Infinity Fabric Frequency and Dividers submenu
- Enter the SoC Voltage submenu
- Set SoC Voltage to 1300
- Enter the DDR and Infinity Fabric Frequency/Timings submenu
Then save and exit the BIOS.
After applying the BIOS settings, the boost frequency at 1 active thread is about 5602 MHZ and the average boost frequency gradually trails off to 5269 MHz when all cores are active. In a light single-threaded workload, all cores in CCD0 can boost to over 5.8 GHz and all cores in CCD1 boost over 5.6 GHz.
We re-ran the benchmarks and checked the performance increase compared to the default operation.
- Geomean: +7.06%
- PYPrime 32B: +37.81%
- 7-Zip: +13.36%
- IndigoBench (bedroom): +12.17%
- Geekbench 6 (single): +6.45%
- Geekbench 6 (multi): +24.38%
- Geekbench AI (ONNX SP): +17.96%
- Geekbench AI (ONNX HP): +10.06%
- Geekbench AI (ONNX Q): +16.64%
- Cinebench 2024 Single: +6.72%
- Cinebench 2024 Multi: +18.46%
- CPU-Z V17.01.64 Single: +5.71%
- CPU-Z V17.01.64 Multi: +4.48%
- V-Ray 5: +13.40%
- Corona 10: +11.75%
- AI Benchmark: +23.90%
- Y-Cruncher PI 5B: +24.23%
- 3DMark Night Raid: +2.80%
- 3DMark Solar Bay: +0.12%
- Returnal: +0.92%
- Tomb Raider: +0.99%
- Final Fantasy XV: +2.60%
Here are the 3DMark CPU Profile scores:
- CPU Profile 1 Thread: +2.62%
- CPU Profile 2 Threads: +1.86%
- CPU Profile 4 Threads: +1.92%
- CPU Profile 8 Threads: +2.03%
- CPU Profile 16 Threads: +3.81%
- CPU Profile Max Threads: +7.22%
Here are the AIDA64 memory benchmark scores:
- Memory Read Bandwidth: +47.20%
- Memory Write Bandwidth: +44.53%
- Memory Copy Bandwidth: +41.63%
- Memory Latency: +47.54%
Curve Shaper is definitely a matter of finetuning the margins of the CPU. However, the performance uplift is surprisingly consistent across all workloads. The Geomean benchmark performance improvement is +7.06%, and we get a maximum improvement of +37.81% in PyPrime.
When running the OCCT CPU AVX2 Stability Test, the average CPU core effective clock is 4885 MHz with 1.026 volts. The average CPU temperature is 95.1 degrees Celsius. The average CPU package power is 236.3 watts.
When running the OCCT CPU SSE Stability Test, the average CPU core effective clock is 5166 MHz with 1.099 volts. The average CPU temperature is 95.1 degrees Celsius. The average CPU package power is 236.6 watts.
AMD Ryzen 9 9950X: Conclusion
Alright, let us wrap this up.
This was my third Ryzen 9000 overclocking guide, and I finally got to play around with a dual-CCD processor. Tuning dual-CCD Ryzen CPUs is always tricky because we’re essentially tuning two V/F curves at the same time.
As per usual, Curve Optimizer is the way to squeeze more performance out of the CPU. Tuning the memory timings also helped, but not as much as it did with the Ryzen 7 9700X and Ryzen 5 9600X. I also found that Curve Shaper had a surprisingly consistent impact on performance even though we’re really tuning the margins.
A key performance limiter for this processor is the so-called HTFmax, preventing the CPU from boosting over 5375 MHz in high-temperature scenarios. I didn’t cover that topic in this video, but I will follow up with a separate video on this topic.
Anyway, that’s all for now.
I want to thank my Patreon supporters for supporting my work. If you have any questions or comments, please drop them in the comment section below.
See you next time!
W4r10ck
Thanks for the informative article. I noticed your Cinebench run on stock config is 2024 but the following runs say R23. Since it has 4 digit scores, would that be safe to assume you only run 2024 for the entire session?
Pieter
Oops! Fixed the typo. Yes, it’s Cinebench 2024 for the entire session.