One man’s adventure in Ryzen 7900X3D Overclocking

TLDR; I wanted to get better gaming performance on my do-it-all workstation. Now I want to better understand how to make it even better.

Preface:
Let’s start with my last PC. I had a 3600X and 32GB of the same RAM sticks I bought when Ryzen 1700 came out in 2015. Various cards lived in this system…but let’s ignore graphics for now.

I wanted to upgrade maybe 18 moths or 2 years ago. At that time my workload shifted from a lot of gaming to a lot more video editing, encoding, development work…etc. I was also toying around in some adventures with Gen3 NVME and wanted to have more PCIE lanes.

So 18months or so ago I bought an AMD EPYC 7282 and a Supermicto H11 board from China for what I thought was a good price. I quickly learned that gaming performance suffered far more than I had thought it would…and about 6 months after that I bought a 7F52. And it also didn’t help as much as I thought it would. Live and you learn, right!

In any case I’ve been playing games again more often lately, and I was having stupid problems. Witcher 3 and Cyberpunk ran like crap without DLSS frame gen being cranked.

Since Ryzen 7000 is now relatively stable after post launch fun, and x3D is also more mature…I figured it was time to kick back down to the consumer platform and have my cake and eat it to.

Question I am trying to answer:

Given the current limits imposed by AMD on X3D parts, how can I extract the most performance out of my 7900X3D? What factors matter the most. I don’t care about power consumption much, only in as much as my Noctua U12Ss performance at removing the heat.

System:
Ryzen 7900X3D
64 GB Gskill EXPO @ 6000Mhz cas 30 (no tuning yet just expo)
Asus ProArt x670e (chosen for its extensive I/o)
MSI 4070 ti
Corsair 1200 watt psu

Other Hardware:
I also ordered all of the things necessary to use my Noctua cooler on a direct die mount, and offset mount, and all of the tools and accessories to do the deluding from debu8er/Thermal Grizzly…with both Conductonaut Extreme and Kryonaut Extreme

Testing:
Given what I think is a solid foundational platform, is it possible/can I squeeze 10-20% or more performance out of this thing?

Initial findings:
PBO is a lot more complicated than static multipliers and voltage mods. I miss the old days of 2500ks, changing two values and getting 5.0 GHz.

Playing with PBO settings and Curve Optimizer values I have seen potential for about 5-10% performance increases. This is with Cinebench R23. But this is a long and manual process and I’m far too lazy for that.

Current Phase:
Now I am fooling with 1usmus Hydra program. It’s really cool, and I’m running the optimizer tool thing now with various permutations of parameters.

Goals:
I want to redo all my testing when I perform the additional hardware mods, so as to determine the relative value in performance per dollar for the physical mods on top of the software ones.

HELP:
What questions should I be asking? I’ve been out of the overclock loop since before my Ryzen 1700 system in 2017. The last system I spent a substantial amount of time tuning and delidding was a 4670k and a lot has changed. Am I doing this right at all? lol

It seems that PBO and CO are really designed to reduce heat/energy consumption in order to encourage more better boost behavior. Given additional hardware modifications to cool the chip better, will I even see it opportunistically boost more? Will more tuning AFTER installing the hardware mods even be required?

Really, what I am trying to do is normalize the gap between BASE and BOOST clock and try and get CONSISTENT performance like we did in the golden age of the 2500k :laughing:…Maybe with some single core boost flair…best of both worlds and all.

that’s what you’re looking at, gone are the old days of traditional overclocking
reducing temps can make the CPU run more efficient, there are a couple methods of doing this

You can sand down your IHS down but make sure you don’t go further than the LGA retention bracket or else you’ll have to delid and replace that with a custom delided retention bracket

on your Noctua you can take the retention bracket and flip it upside down and swap the direction the screws


this will push the heatsink down a bit to make up for what you sanded down

you may or may not need to sand down the plastic standoffs, use calipers and double check how much you sanded and how much you need to offset, over torqueing is worse than under torqueing because you can damage the pins on the mobo and the PCB of the CPU

I did this with a U14S and a U12 to direct die a Erying Chinese board

EDIT: I just read the part where you already ordered the stuff for direct die stuff

1 Like

You may have the wrong board for X3D overclocking. Some boards have an external clock generator (eCLK) that will allow you to OC the cpu without affecting the pcie signaling etc. As the multipliers are locked on the X3D parts I think this is the only way to actually overclock.

The proart does not have this eCLK. Some other asus boards do, as well as the taichi, and perhaps some others?

If you just want to optimise cooling so that the cpu will run at ‘stock’ boost tgat is not necessary. But in gaming these don’t get so hot so it might even run fine without doing anything.

1 Like

I am having problems with this board being whacky. I thought it was my oc at first, but even at stock weird shit with my USB IO keeps happening. I moved my USB ports to a pcie card and the problem went away.

Not dealing with a 500 motherboard that kind of works. That’s literally why I didn’t buy a 250 dollar motherboard. I hate fiddly crap. It’s a damn shame when a 20 dollar AliExpress usb card works and onboard does not….

Ordered the STRIX X670E and giving ASUS one more shot before giving up on them again this generation.

Tbh I have had a lot of bad luck with boards the past couple years. My AM4 system I had 4 boards die of various causes from 2017-2022….none of them even overclocked at all.

I had thought the weird quirkybess on AMD platforms was getting better…but perhaps not. Really don’t want to abandon ship and flip over to 13900K but if this board ain’t better I’ll eat the delid tooling cost and do it.

Keep us posted, I’d love to see the U12S performance on delided 7900X4D

TLDR; I miss the glory days of my 2500k. Things were much simpler…lol The amount of pre-overclocking efforts required to solve this nut is insane. Before I could just say “lulz this guy got 5.0GHz with this motherboard and 1.45v let me start there.”

Recap:
This all started because I wanted to play Starfield, and even with my 4070 Ti (which I bought primarily for non gaming things) my performance was dog shit. Then I watched the whole GN/Intel thing about “GPU Busy” thing.


Moving on

Got my ROG board in today. Spent a bunch of time considering my approach here. Some resources I found that were relevant:

Really good overclocking guide for the regular 7900X:
SkatterBencher #46: AMD Ryzen 9 7900X Overclocked to 5900 MHz - SkatterBencher

How to use Hydra:
HYDRA BIG TUTORIAL - Google Slides

BuildZoid Talking eclk:

This post is largely influenced by their testing methodology but I think my spin and path forward on it remain “different enough” to document my attempt to solve the problem.


Here’s my current list of foundational assumptions:

  • We know AMD locked the multiplier and vcore adjustments on X3D.
  • We know Curve Optimizer adjusts voltage on a per-core level.
  • We know LLC compensates for vdroop by giving you a higher starting voltage.
  • We know we can use eclk to simulate the affects of a multiplier, and eek out better base clocks.
  • We know in 2023 overclocking is not that simple. Precision Boost is inherent to the chip design.
  • PBO can be leveraged as a tool to eek out better boost clocks.
  • Ryzen 7000 can get hot when you start drawing current, thermal density problems

Here’s my current plan:
Hydra:

:no_entry:WARNING: From my experience, adjustments made in Hydra, by Hydra are >ADDITIVE in nature. What that means is if you set a curve optimizer value in your BIOS of -30, >and you also have a cure optimizer value set to -30…when Hydra opens you will have a value of >-60. It’s certainly possible to extend beyond the limits in place by AMD and you can potentially >damage your CPU. :no_entry:

It’s probably a good idea to

  1. DELETE your copy of Hydra between runs and re-extract it each time you want to do a scan.
  2. NEVER make changes to the BIOS before a scan is completed.
  3. NEVER open a non-freshly extracted Hydra after making an overclocking related BIOS change

I can leverage Hydra to find my strongest and weakest cores. Hydra basically optimizes your CPU on a core-by-core basis to draw the least amount of current at a target boost speed. So I don’t have to rely on just making a blanket assumption that ccd0 will be more efficient than ccd1. I will have the data to prove it and adjust accordingly.

In all honestly, I still don’t know what Hydra does beyond that (from a CPU perspective, anyway) but the X3D doesn’t support Hybrid OC anyway AFAIK so I am only using it as a discovery tool.

I wrote a little script to parse Hydra’s logs (they are way too long to parse manually IMO) to yank out the information that matters to me and spit out a csv for me.

import re
import csv
import os
import datetime
import glob

# This code block performs the following tasks:
# 1. It compiles regular expressions patterns using the re.compile() function.
#    - The first pattern, core_pattern, matches the string "CORE#" followed by one or more digits (\d+),
#      followed by one or more whitespace characters (\s+), followed by the string "CPPC: " and one or more digits (\d+),
#      followed by one or more whitespace characters (\s+), followed by the string "AMD CO: " and a signed integer (-?\d+).
#    - The second pattern, test_pattern, matches the string "EFREQ: " followed by one or more digits (\d+).
# 2. It initializes two empty dictionaries, results and co_values.
# 3. It opens the file specified by the filename variable in read mode and reads all the lines into a list called lines.
# 4. It iterates over each line in the lines list.
#    - It searches for a match of the core_pattern and test_pattern in each line using the search() method of the compiled patterns.
#    - If a match is found for the core_pattern, it extracts the core number and CO value from the match using the group() method.
#      It then adds the CO value to the list associated with the current_core key in the co_values dictionary.
# 5. It filters the results dictionary based on the CO values.
#    - It creates a new dictionary called filtered_results, which contains only the key-value pairs from results
#      where the CO value is in the top 3 CO values for the corresponding core.
# 6. It sorts the efreqs (EFREQ values) in descending order for each key in filtered_results and keeps only the top 3 values.
#    - It creates a new dictionary called top_results, which contains the key-value pairs from filtered_results
#      with the top 3 EFREQ values for each key.
# 7. It determines the directory path of the input filename and creates an output filename by joining the directory path
#    with the string 'results.csv'.
# 8. It opens the output_filename in write mode and creates a csv.writer object called csv_writer.
# 9. It writes the header row to the CSV file with the column names: "Core", "CO Value", "Highest EFREQ",
#    "2nd Highest EFREQ", and "3rd Highest EFREQ".
# 10. It iterates over the key-value pairs in top_results and writes each row to the CSV file.
#     - Each row consists of the core number, CO value, and the top

def parse_lines(lines):
    print("Parsing lines...")
    core_pattern = re.compile(r"CORE#(\d+)\s+CPPC: \d+\s+AMD CO: (-?\d+)")
    test_pattern = re.compile(r"EFREQ: (\d+)")
    results = {}
    co_values = {}
    current_core = None
    current_co = None

    for line in lines:
        core_match = core_pattern.search(line)
        test_match = test_pattern.search(line)

        if core_match:
            current_core = f"CORE#{core_match.group(1)}"
            current_co = int(core_match.group(2))
            co_values.setdefault(current_core, []).append(current_co)

        if test_match and current_core and current_co is not None:
            efreq_value = int(test_match.group(1))
            results.setdefault((current_core, current_co), []).append(efreq_value)
    
    return results, co_values

def filter_and_sort_results(results, co_values):
    print("Filtering and sorting results...")
    filtered_results = {(core, co): efreqs for (core, co), efreqs in results.items() if co in sorted(co_values.get(core, []))[:3]}
    top_results = {key: sorted(efreqs, reverse=True)[:3] for key, efreqs in filtered_results.items()}
    return top_results

def export_to_csv(top_results, source_filename):
    print(f"Exporting results for {source_filename} to CSV...")
    directory = os.path.dirname(source_filename)
    base_name = os.path.splitext(os.path.basename(source_filename))[0]  # Extracting the file name without extension
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    output_filename = os.path.join(directory, f'{base_name}-filtered-results-{timestamp}.csv')
    
    with open(output_filename, 'w', newline='') as csvfile:
        csv_writer = csv.writer(csvfile)
        csv_writer.writerow(["Core", "CO Value", "Highest EFREQ", "2nd Highest EFREQ", "3rd Highest EFREQ"])
        
        for key, values in top_results.items():
            row = [key[0], key[1]] + values + [None] * (3 - len(values))
            csv_writer.writerow(row)
    
    print(f"Results exported to {output_filename}")

def extract_highest_efreq(filename):
    print(f"\nExtracting highest EFREQ for file: {filename}")
    with open(filename, 'r') as f:
        lines = f.readlines()

    results, co_values = parse_lines(lines)
    top_results = filter_and_sort_results(results, co_values)
    export_to_csv(top_results, filename)

def process_all_files(directory):
    print(f"Starting processing for directory: {directory}")
    # This will match all .txt files in the given directory
    for filename in glob.glob(os.path.join(directory, '*.txt')):
        print(f"Processing file: {filename}")
        extract_highest_efreq(filename)
        print("\n")

# Target directory (can be changed as needed)
directory = "c:\\oc\\HYDRA_1.5C_PRO\\HYDRA 1.5C PRO\\LOGS"
process_all_files(directory)

Which should format it nicely with:

CORE, CO VALUE, and MAXIMUM CLOCK

I asked it to give me 3 values each for CO VALUE and CLOCK. These numbers are going to my baseline numbers to work from.


Math Time?
I want to increase baseclock and allow boost clocks to rise proportionally, but only if possible. This will maintain the performance characteristics software is being designed to expect.

Next set of assumptions:

  • We know voltage=heat
  • We know overclocking needs voltage
  • We should leverage CO, PBO and eclk to develop our solution.
  • I am developing “ASIC Quality” Logic for each core, based on its CO value from Hydra.
  • A lower CO value equals a higher ASIC quality

We know from GPU-Z ASIC quality that we can generally assume some GPUs want more voltage than others at similar clocks. This actually makes them less efficient but potentially more overclockable.

This next bit isn’t perfect given my assumptions


Core	Highest EFREQ
CORE#0	        5157
CORE#1	        5156
CORE#2	        5149
CORE#3	        5156
CORE#4	        5156
CORE#5	        5155
CORE#6	        5479
CORE#7	        5520
CORE#8	        5454
CORE#9	        5469
CORE#10	5453
CORE#11	5419

And I’m going to notate the highest frequency listed here and use that as the basis for defining my new fmax…with an eclk twist. In this case it’s 5520

Using SkatterBencher’s formula:

With ECLK, we still build on the factory-fused VFT curve but adjust the frequency by adjusting the reference clock. For example, if the Precision Boost has a VFT point for 5000 MHz at 1.15V at 50C, with an ECLK of 105 MHz, the actual point will be 5250 MHz at 1.15V at 50C.

Baseclock is a bit easier to calculate but because I am dumb and lazy,I’ll let chatgpt do the maths for this

:no_entry:WARNING: don’t use my numbers, use your own math! They are EXAMPLES only. Not real data.:no_entry:

ChatGPT says (truncated for brevity in the forums)

For ECLK = 106 MHz:
  **Boost Clock:** 
      Adjusted Frequency = 5520 * (106/100) = 5851.2 MHz
  **Base Clock:**
      Frequency = 44 * 106 = 4664 MHz

For ECLK = 108 MHz:
  **Boost Clock:** 
      Adjusted Frequency = 5520 * (108/100) = 5965.6 MHz
  **Base Clock:**
      Frequency = 44 * 108 = 4752 MHz

For ECLK = 110 MHz:
  **Boost Clock:** 
      Adjusted Frequency = 5520 * (110/100) = 6072 MHz
   **Base Clock:**
     Frequency = 44 * 110 = 4840 MHz

I’m also going to attack the CO front and do some LLC calibration to more broadly to find stability in the above clock targets. Let’s start by using the corresponding CO values for the frequency examples above, as extracted from Hydra’s scanning.

I’m going to keep iterating each of these values by +1 until the first core reaches +30, which IIRC is as high as you can go with a positive CO in BIOS on my new board. In this case CORE 6 and 7 are -12, to get them to +30 I need to add 42.

Core Hydra CO Value Adjusted CO Value
CORE#0 -48 -6
CORE#1 -39 +3
CORE#2 -33 +9
CORE#3 -31 +11
CORE#4 -39 +3
CORE#5 -36 +6
CORE#6 -12 +30
CORE#7 -12 +30
CORE#8 -18 +24
CORE#9 -18 +24
CORE#10 -18 +24
CORE#11 -18 +24

GOALS:

Given previous testing at stock, I should expect somewhere in this neighborhood running 4.6 for ccd0 and 4.8 GHz for ccd1 in Cinebench.
Given clocks at stock while playing Starfield are ~5.0-5.1 GHz pretty consistently in that workload.

I am going to work through the above permutations and document the next part of my journey. I’m still not quite sure where I’ll land just yet. I’d be happy to see 5.2-5.4 in Starfield and 4.8-5.2 in Cinebench.

Really looking to get somewhere between eclk 106-112 stable, just no idea what to expect.


Methodology:

I’m going to set the real CO numbers I get from finishing a pass of Hydra. The only thing I cared to set was negative fclock target (5650 is stock) of 5450. When It’s done:

  • I’m going to set PBO to a corresponding -200 max boost for now. This means the adjusted target maximum boost frequency above will be subtracted by 200.
  • I’m going to set the adjusted CO values.
  • I’m going to set LLC to 5.

Then I am going to start working my way up the eclk train 2 at a time until Windows won’t boot. Then I am going to back it off by 2 and increase LLC to 6. If that is still not stable I will back off eclck by 1. Other knobs and tubes, Rinse and repeat until I find real-world stability over time.
Delidding mods will only come after, and I will redo alot of this math and testing given the new thermal environment at that point.


Personal Sidebar:
I am probably now overcompensating for my systems engineering on my workstation, though, its primary purpose is only sometimes gaming.

Gaming was always a social thing for me. These days, there’s not alot of “social” gaming with my friends. We all kind of fell off the League train…and not enough of them go into Diablo, as an example, to pick up something new with them. More or less, my friend group and I are busy adulting more and more often anyway so hasn’t been a priority for me to invest in gaming. But I do still get obsessed with a good RPG for a few weeks and then move on to other media/hobbies. I’d like to reinvest in that part of my system.

1 Like

Okay - Hydra Finished. Heres’ my raw data.

Core CO Value Highest EFREQ 2nd Highest EFREQ 3rd Highest EFREQ
CORE#0 -48 4956 4956 4954
CORE#0 -46 4956 4956 4955
CORE#1 -48 4956 4956 4956
CORE#1 -50 4930 4755 4699
CORE#10 -48 5447 5444 5256
CORE#10 -50 5256 5255
CORE#11 -45 5453 5452 5256
CORE#11 -48 5452 5426 5256
CORE#11 -50 5450 5411 5256
CORE#2 -42 4956 4955 4949
CORE#2 -43 4956 4955 4943
CORE#3 -45 4956 4956 4955
CORE#3 -48 4956 4955 4955
CORE#3 -50 4955 4955 4955
CORE#4 -45 4955 4954 4939
CORE#4 -48 4955 4955 4941
CORE#4 -44 4954 4947 4938
CORE#5 -45 4954 4949 4939
CORE#5 -48 4955 4955 4946
CORE#5 -50 4956 4955 4955
CORE#6 -39 5450 5449 5255
CORE#6 -38 5455 5455 5255
CORE#7 -42 5455 5448 5256
CORE#7 -45 5255 5255 5253
CORE#7 -41 5455 5454 5255
CORE#8 -48 5453 5452 5256
CORE#8 -46 5456 5455 5256
CORE#9 -42 5455 5451 5256
CORE#9 -45 5255 5255 5255
CORE#9 -43 5454 5453 5256

Throwing out the lowest clocks for each CO value, and picking the lowest CO value. Any test which did not have at least 3 highest frequencies gets thrown out. Basically see all my above maths and logic. Feel free to sanity check me here. I’m not wholly confident in all of my maths.

This is going to be my first go:
Spreadsheet form, maybe useful to other folks?: 7900X3d_106_eclk.xlsx


Core CO Value (Tweaked by Hydra at stock) Highest EFREQ observed by Hydra (Boost clock) New eclk value: test 1 Target Boost Clock(Normalized to eclk) Overclock % Base clock (Stock 7900X3D) Base clock (Normalized to eclk) Overclock % Max Voltage for 162W (Stock 7900X3D) Stock Max Wattage (assuming .1 ohms) CO Value (Normalized to first core to +10) New Max Voltage (normalized to CO values) New Max Wattage (assuming .1 ohms) LLC Level (Asus, higher is more aggressive)
CORE#0 -48 4956 106 5253.36 106% 4400 4576 104% 1.35 18.2 0 1.35 18.2 Default for now
CORE#1 -48 4956 106 5253.36 106% 4400 4576 104% 1.35 18.2 0 1.35 18.2 Default for now
CORE#2 -43 4956 106 5253.36 106% 4400 4576 104% 1.35 18.2 5 1.4 19.6 Default for now
CORE#3 -48 4956 106 5253.36 106% 4400 4576 104% 1.35 18.2 0 1.35 18.2 Default for now
CORE#4 -48 4955 106 5252.3 106% 4400 4576 104% 1.35 18.2 0 1.35 18.2 Default for now
CORE#5 -50 4956 106 5253.36 106% 4400 4576 104% 1.35 18.2 -2 1.33 17.7 Default for now
CORE#6 -38 5455 106 5782.3 106% 4400 4576 104% 1.35 18.2 10 1.45 21 Default for now
CORE#7 -45 5255 106 5570.3 106% 4400 4576 104% 1.35 18.2 3 1.38 19 Default for now
CORE#8 -46 5456 106 5783.36 106% 4400 4576 104% 1.35 18.2 2 1.37 18.8 Default for now
CORE#9 -45 5255 106 5570.3 106% 4400 4576 104% 1.35 18.2 3 1.38 19 Default for now
CORE#10 -48 5447 106 5773.82 106% 4400 4576 104% 1.35 18.2 0 1.35 18.2 Default for now
CORE#11 -45 5453 106 5780.18 106% 4400 4576 104% 1.35 18.2 3 1.38 19 Default for now
Totals 218.4 225.1

Here’s my current status:

Config VID PPT Temp Frequency ccd0 Frequency ccd1 Multithreded Score
Stock 1.05 110 71.6 4618 4602 25072
HYDRA Only 1.04 109 72.8 4846 4766 26371
eclk 106 1.05 123 83.6 4907 5036 27008

Gonna push 108 likely and prob have to stop due to temps.

Definitely hitting a thermal and probably voltage wall. Not going to attempt any additional progress until delidding. New settings can be found in the spreadsheet: Sign in to your account

This is at eclk 108:

Config VID PPT Temp Frequency ccd0 Frequency ccd1 Multithreded Score Realtive Improvement between steps Realtive Improvement between stock
Stock 1.05 110 71.6 4618 4602 25072 100% 100%
HYDRA Only 1.04 109 72.8 4846 4766 26371 105% 105%
eclk 106 1.05 123 83.6 4907 5036 27008 102% 108%
eclk 108 1.08 127 88.2 4987 5134 27679 102% 110%



Yeah 89C is supposed to be the temp limit for X3D CPUs. So to continue > eclk 108 would only help if you could get the temps lower.

1 Like

Going to let this stress test finish - but seems basically stable and temps don’t get that high (or at least not high enough to throttle) in this workload. Given my real-world use cases, this is probably fine.

Testing by:
SCNickF1227/x264-stability-test: This script, utilizing the x264-64 tool, performs stability tests on CPUs by dynamically testing and stressing varying quantities of CPU cores. It is designed to help you evaluate the stability under both highly multithreaded and less multithreaded workloads. This script is intended to be run in a Windows environment and relies on Python scripting. (github.com)

Where X264 settings are:

                try:
                    process = subprocess.Popen([
                        "x264-64",
                        "--quiet",  
                        "--preset", "slower",
                        "--crf", "16",
                        "--threads", str(current_thread),
                        "--rc-lookahead", "40",
                        "--aq-strength", "1.5",
                        "--merange", "24",
                        "--subme", "10",
                        "--psy-rd", "1.5:0",
                        "--video-filter", "crop:0,20,0,22/resize:width=1920,height=1040,method=lanczos4",
                        "--thread-input",
                        "--output", "encode.mkv",
                        "test-1080p.mp4",
                        "--aud"
                    ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

Where threads are 24, 12, 6 in loops of 10 (twice), and 2 threads in a loop of 20.

1 Like

Got my delid stuff today. I didn’t install the Noctua offset mount yet, only the direct die mounting kit, wanna track that as another variable.

Being 8 degrees Celsius cooler (about 10%) only DIRECTLY yielded about a 1% performance increase. It remains to be seen whether or not additional gains can now be had.

Config VID PPT Temp Frequency ccd0 Frequency ccd1 Multithreded Score Realtive Improvement between steps Realtive Improvement between stock
Stock (EXPO enabled) 1.05 110 71.6 4618 4602 25072 100% 100%
HYDRA CO Tweak Only 1.04 109 72.8 4846 4766 26371 105% 105%
eclk 106 1.05 123 83.6 4907 5036 27008 102% 108%
eclk 108 1.08 127 88.2 4987 5134 27679 102% 110%
eclk 108 + delid w/kryonaut 1.07 126 80.6 4979 5140 28069 101% 112%


2 Likes

The X3D chips are generally not designed for overclocking.
So i´m kinda curious how far you can get with those.
However be cautious in regards to voltages.

1 Like

TLDR; this is probably as far as I will get. All tuning after the above saw regressions.

@MisteryAngel That’s actually the problem. This all shoulda been expected but I went into this with both no research and an utter lack of knowledge of overclocking much since Haswell.

I can sorta increase the CPU VCORE by using CPU LLC tuning. However, none of that actually translates to a higher core VID, which is ultimately what actually matters. My guess here is AMD has some sorta new-fangled version of Intel’s FIVR…and they are internally controlling voltages on a per-core basis.

So in this instance, LLC increases ONLY translate to higher wasted heat loads, without the usual side affect of higher real core voltage.

What I also observed is that, all CO modifications seem to be doing is influencing this CPU VID range by shifting the minimum or maximum based on Negative or Positive values.

There does not appear to be a way to adjust CPU VID on X3D, and given that forcing the situation with LLC no longer really applies, I’m basically voltage limited by design and can’t move forward. What I need to do is raise the minimum Core VID to move forward but I cannot. I’ll see if there’s a way to use higher than 30 CO values, but I’m not sure its possible.

Confirmed via the User Manual for the motherboard, its nested under the core multiplier:

Blockquote

No with Ryzen 7000X3D you not ONLY lose control of the multiplier, you cannot really make up for it in eClk beyond a couple of % points because you hit a thermal and power wall. You can get around the thermal one, but it pretty closely mirrors the power wall. In other words, AMD did a pretty damn good job tuning these.

EDIT: It looks like I was wrong about the maximum value for CO of 30. It seems it’s now 60, at least on the ROG 670E Strix:


So perhaps I can get 110 baseclock to give me something that’s not hot garbage, performing worse while generating more heat.

But it’s also possible that AMD has a safeguard to not allow the average CPU VID to go much higher than 1.10. During all of my testing, I never consistently saw it go higher than 1.08 under a decently long heavy all-core workload, no matter the CO values I have set. Smaller loads did have substantially higher VIDs (1.3s), but when under stress they are consistently much lower. All in all, I’m not sure if even higher CO values will translate to more stability.

2 Likes

I agree. At the same time, compared to the Haswell era both AMD and Intel CPUs run way closer to the limit at stock, so gains are expected to be way smaller. One factor is the fierce competition where both brands are pushing limits to win benchmarks, the other is probably improved (more consistent) manufacturing processes and binning.

That said, your 12% gains are pretty good, I’d say. On a non-X3D chip you could start pushing the voltage a bit now and get a few more MHz. But since power scales quadratically with voltage, you could only eek out a few percent any way IMO.

But it’s also possible that AMD has a safeguard to not allow the average CPU VID to go much higher than 1.10. During all of my testing, I never consistently saw it go higher than 1.08 under a decently long heavy all-core workload, no matter the CO values I have set. Smaller loads did have substantially higher VIDs (1.3s), but when under stress they are consistently much lower. All in all, I’m not sure if even higher CO values will translate to more stability.

With only CO, the max VID should not change, just the frequency at those VID. Higher for negative offset, lower for positive. The VID curve is temperature dependent too, I think, so lower temps do help too.

1 Like

I think the main takeaways here are:

  • Curve Optimizer is really your only friend
    • Hydra is really good at finding these values. Not sure how it compares with Ryzen Master
  • Delidding X3D isn’t worth it
    • Probably won’t allow you to eek out more than maybe 2% depending on silicon quality and how aggressive you can lower the curve. Considering the $$ not worth it.
1 Like

I never had much luck with Hydra being accurate, not run-to-run and not with real use stability after testing. I could get 24+ hours of stability checking well and done, and actual mixed-load use would give crashes at indeterminate times.

I do think the main source of your issues is using a not-uber-gamer-overclocker focused Asus board. I have similar CO offset behaviors on an X570 and 5800X, and 5800X users on other boards generally have wildly different negative CO offsets. I have been running full negative 30 CO offsets for over a year without issue, and when describing this on another forum (TPU) I had been told it’s impossible and cannot be stable and this’n’that. A year later, here I am with zero reliability problems.
I think Asus’ voltage control is downright garbage, and possibly intentional for motherboard review benchmarking purposes.

I don’t know which AM5 board you would need, or which is the ideal for your work uses, but I strongly recommend ditching Asus for a different vendor’s high quality mobo.