--- title: "AMD and the Curse of Conflicting Information" category: Blog tags: ["AMD", "Ryzen", "Overclocking", "Undervolting", "Curve Optimizer", "WordPress Archive"] ---

Against better judgement to just wait, back in December 2020, I ordered a AMD Ryzen 9 5950X - and received possible one of the worst chips to be on the market. In Cinebench R23, it achieved a Single Core score of ca. 1550, with a Multi Core score of ca. 24040. This by itself doesn't look too bad, until you open Cinebench R20 and get ca. 580 in Single Core, with Multi Core just barely hitting the 9800 barrier.

So I did what any person with this hardware would do, and searched for overclocking options.

## Overclocking on AMD Ryzen

With Zen3, AMD has granted us overclockers more than enough options to edge out every possible point of performance we can possibly need at the current time. Some of them are exclusive to any other method, while other methods can stack to some degree. I'll only look at the main three here:

1. VCore: This is your classic undervolting option which can be used to offset the Voltage the CPU Cores actually get.
2. PBO: Automatically increases the Boost clock speed and voltage according to a built in Voltage/Multiplier curve, up to the limits specified by you or the Motherboard. Not exclusive with VCore.
3. Curve Optimizer: An offset applied to the indexing of the Voltage/Multiplier curve, with each step being 3-5mV according to AMD. Not exclusive with VCore, but appears to do the same.

## VCore vs Curve Optimizer

A fair number of resources out there state that VCore offsets and Curve Optimizer are exclusive. In a perfect ideal CPU sample, they are, but in reality, it's not that simple. In order to understand why, it is necessary to understand the basics of how PBO figures out what Multiplier it can actually run at. Most likely, AMD uses a Look-Up-Table (LUT) to figure out what Multiplier to use. Below is an example of such a LUT:

mV | 300 | 305 | 310 | 315 | 320
--- | --- | --- | --- | --- | ---
Multiplier | 37.500 | 37.625 | 37.750 | 37.875 | 38.000

Example PBO Look-Up-Table

For now, let's ignore the additional calculations for the allowed maximum mV and Multiplier, and just assume it is a perfect world. If the user has Curve Optimizer disabled, a lookup for which Multiplier would apply at +310mV would return 37.750. But if the Curve Optimizer is set to -10mV (-2 in the options), the Multiplier returned would be 38.000 - we offset the Multiplier lookup up by 2 in the table.

And then there is VCore offsets, which sound like they should do the same, but in reality they don't. Unlike PBO and Curve Optimizer, VCore offset does not modify which multiplier we end up with, it only modifies the effective Voltage. So in the above example with PBO and Curve Optimizer at -2 with an offset of -25mV, we'd still have lookup for +320mV a Multiplier of 38.000, but now our Voltage offset is only +295mV.

So now I hope you understand the difference between the two options and why they are not exclusive to each other. It is true that a fixed VCore will break PBO and Curve Optimizer, but offsets are perfectly fine. In fact, I wrote this blog post with PBO On, Curve Optimizer at -10, and a VCore offset of -37.5mV.

## Benchmarks

As usual, to verify my findings I ran a number of benchmarks. Tests were ran for 20 minutes each, so plenty of heat was available to reduce the score.

Settings | CBR23 MC | CBR23 SC
--- | --- | ---
PBO Off, CO 0, VCoreD 0 | ~24040 | ~1550
PBO On, CO 0, VCoreD 0 | ~26530 | ~1542
PBO MB, CO 0, VCoreD 0 | ~26670 | ~1550
PBO MB, CO -10, VCoreD 0 | ~27211 | ~1555
PBO MB, CO -10, VCoreD -25mV | ~27400 | ~1560

While I'm still far away from what other people manage, this is already very promising. Maybe I'll find a golden egg while searching for settings and can bring this bad bin to a decent state.