This fourth installment of our Ethereum mining guide will focus
on optimizing your rig’s performance via GPU clock speed and voltage
setting tweaks to achieve maximum efficiency.
The tweaks that I outline in this article are applicable whether you’re using Linux or Windows. If you’re using the hardware that was recommended in the first part of this guide (or very similar hardware), you should expect to achieve Ether mining performance gains of 20-25%, compared to stock settings! At the same time, you’ll reduce power consumption by 10-15% (and consequently, lower GPU temperature and fan noise).
More speed for less power—how is that possible? Click “read more” to find out, in our mining performance optimization guide!
Disclaimer: Installing a custom BIOS and/or changing factory clock speed & voltage settings on your graphics card(s) may cause system instability, may harm your hardware, and probably invalidates your warranty. I assume no responsibility for hardware damage if you choose to follow this guide!
With that said, I’ve flashed probably close to a hundred GPUs, and I haven’t destroyed any hardware yet. =) If you proceed, just make sure to follow the steps in order, don’t take any shortcuts, and stop if there is anything that you’re confused or unsure about.
My screenshot shows the default BIOS from an Asus 1650mhz factory-clocked RX 470 4GB GPU. If you have a 4GB RX 470, it should look pretty similar, although many of the values will likely differ by a small amount. At these factory settings, I get around 20 Mh/s in Claymore’s Ethereum miner, which isn’t spectacular.
If you don’t see memory timing values for your card, try this version of Polaris instead (click the “clone or download” button, then “Download ZIP”).
When you’re comfortable, let’s move on and start modifying some values.
If you have a RX 470/480 that has memory clocked at 1750mhz or less (eg: most 4GB cards), you may have noticed that it’s really easy to overclock past 1750mhz via the driver (in Windows, anyway). You probably also noticed that mining performance immediately tanks as soon as you do so: a 1751mhz overclock results in much slower performance than 1750mhz. You may have wondered why, and these memory timings are the answer. On most 4GB cards, the GPU switches over to less aggressive memory timings at clock speeds beyond 1750mhz, which results in slower performance even though the absolute clock speed is higher. We’re aiming to fix that.
This isn’t an exact science, and some experimentation may be necessary for you to achieve optimal results, but what follows is a good starting point and should work for 99% of you:
If you have a 4GB card, the timing change alone should be enough to get you from ~20 Mh/s to ~24 Mh/s. If you have a 8GB card, you likely went from ~24 Mh/s to ~28 Mh/s. We can do better, but that’s a pretty good start!
Power consumption will be unchanged (or even up slightly, due to the more aggressive timings), but we haven’t touched voltages yet.
Once you’ve recorded your GPU’s new metrics (speed, temperature/fan speed, power usage), we can move on.
So if you haven’t already, read step 12 of my Windows guide to get an idea of the process around overclocking and undervolting via driver-level edits. If you’ve already gone through the process, you’ll need to repeat it, as your new more-aggressive memory timings invalidate all of your previous data—you won’t be able to push the memory clock speed as high as you previously could (but performance will be much better).
Using Radeon Settings/WattMan in the manner that I describe in my Windows guide:
If you’re running Linux, this is the only way (currently, at least) to overclock and undervolt.
The original factory BIOS is shown in step 2 for reference. Note that I’ve made absolutely no edits outside of the area I originally outlined in blue. I get over 25 Mh/s after the modifications (+25%), while using ~15% less power compared to stock. These changes are fairly conservative; I’m stable at nearly 27 Mh/s on this card with more aggressive settings, but the increase in power consumption isn’t worth it at my electricity rate.
If you’re looking for a good starting point, the settings pictured here should be stable in just about every 4GB card (in the timings section, just copy the 1500mhz value to every row below it).
When you’re done making your edits in Polaris, save your final BIOS (click “SAVE AS”) as a new file. Then open up ATIWinFlash and write the new .rom to your GPU (same as step 4). Reboot and test!
The tweaks that I outline in this article are applicable whether you’re using Linux or Windows. If you’re using the hardware that was recommended in the first part of this guide (or very similar hardware), you should expect to achieve Ether mining performance gains of 20-25%, compared to stock settings! At the same time, you’ll reduce power consumption by 10-15% (and consequently, lower GPU temperature and fan noise).
More speed for less power—how is that possible? Click “read more” to find out, in our mining performance optimization guide!
Build an Ethereum Mining Rig, part 4: Optimization
Let’s get the bad news out of the way up front: achieving these levels of performance gain require flashing your GPU BIOS with custom replacements. Doing this incorrectly may leave you with a non-working GPU that can be difficult or (sometimes) impossible to restore to factory settings. The steps that I outline in my guide will show you how to minimize the risk that you end up with a bricked GPU, but always remember that messing around with BIOS settings can potentially result in unstable hardware.Disclaimer: Installing a custom BIOS and/or changing factory clock speed & voltage settings on your graphics card(s) may cause system instability, may harm your hardware, and probably invalidates your warranty. I assume no responsibility for hardware damage if you choose to follow this guide!
With that said, I’ve flashed probably close to a hundred GPUs, and I haven’t destroyed any hardware yet. =) If you proceed, just make sure to follow the steps in order, don’t take any shortcuts, and stop if there is anything that you’re confused or unsure about.
What you’ll need
There are ways to create and flash custom BIOS mods to your GPUs without some of these things, but I believe this method is by far the most user-friendly:- A computer running Windows
You’ll flash your GPUs with this computer. My mining rigs run Linux, but I keep a small/cheap SSD loaded with Windows 10 handy for testing/BIOS flashing purposes (I simply swap the SATA connector between disks when I want to switch OSes). Any version of Windows 7, 8, or 10 will work fine (note that you don’t have to activate Windows to install it). Or, you can simply temporarily move your GPUs to another computer running Windows to flash them. - ATIFlash / ATIWinFlash
You can download the latest version of ATIFlash here (v2.74 at the time of this article). We’ll use this to read and write BIOS files to our GPU hardware. - Polaris BIOS editor
You can download the latest version of Polaris BIOS editor here (v1.4.1 at the time of this article). We’ll use this to modify BIOS files. - ATI Pixel Clock Patcher
You can download the latest version of ATI Pixel Clock Patcher here (v1.4.5 at the time of this article). We’ll need this to get AMD’s Windows driver to recognize a modded BIOS. - A Kill-a-Watt electricity usage monitor (or similar device)
Not strictly required, but I highly recommend this—it’ll pay for itself! I have two of these and consider them invaluable in dialing in the performance of my mining rigs. When doing optimization tests, I often find that the last few percentage points of speed gain come at a much larger cost in power consumption (and thus, a decrease in overall profitability)—having an electricity monitor allows me to find the efficiency sweet spot between raw speed and electricity usage. - Some baseline information on each of your GPU’s factory performance to compare your modifications against. If you haven’t already, let each GPU run for 5+ of mining and record its speed, temperature/fan speed, and power consumption at the wall (assuming you have a Kill-a-Watt). This will be immensely useful later when trying to figure out if your mods are beneficial or not.
Step 1: Make a backup of your factory GPU BIOS
Before we start, open your Radeon Settings and disable any overclocking/undervolting that you have set up through WattMan (if you followed my Windows setup guide, you’ll need to temporarily disable the “EthDcrMiner64” profile that you created in step 12). After that:- Open ATIWinFlash (extract the .zip file you downloaded and double-click ATIWinflash.exe).
- You should see your GPU detected at the top under “System Video Devices”. Again, I highly recommend that you have only a single GPU connected for this entire process!
- Click “Save” to make a backup of your GPU’s BIOS data. Don’t lose this file!
Step 2: Open your GPU’s factory BIOS with Polaris BIOS editor
Here is where we’re going to be making all of our modifications. Editing the BIOS data gives us access to a few values that we normally wouldn’t have any control over—most importantly, the memory timing values.- Open Polaris BIOS Editor (extract the .zip file you downloaded and double-click PolarisBiosEditor.exe).
- Click “OPEN BIOS” in the top left, then browse to where you saved your GPU’s factory BIOS in step 1, and double-click it to open it.
My screenshot shows the default BIOS from an Asus 1650mhz factory-clocked RX 470 4GB GPU. If you have a 4GB RX 470, it should look pretty similar, although many of the values will likely differ by a small amount. At these factory settings, I get around 20 Mh/s in Claymore’s Ethereum miner, which isn’t spectacular.
If you don’t see memory timing values for your card, try this version of Polaris instead (click the “clone or download” button, then “Download ZIP”).
When you’re comfortable, let’s move on and start modifying some values.
Step 3: Modify BIOS memory timing values
At this point, you should still have Polaris BIOS editor open, with your GPU’s factory default BIOS loaded. We’re going to focus on the lower-right corner area containing memory timings.If you have a RX 470/480 that has memory clocked at 1750mhz or less (eg: most 4GB cards), you may have noticed that it’s really easy to overclock past 1750mhz via the driver (in Windows, anyway). You probably also noticed that mining performance immediately tanks as soon as you do so: a 1751mhz overclock results in much slower performance than 1750mhz. You may have wondered why, and these memory timings are the answer. On most 4GB cards, the GPU switches over to less aggressive memory timings at clock speeds beyond 1750mhz, which results in slower performance even though the absolute clock speed is higher. We’re aiming to fix that.
This isn’t an exact science, and some experimentation may be necessary for you to achieve optimal results, but what follows is a good starting point and should work for 99% of you:
- If you have a RX 470/480 that is factory clocked at 1750Mhz or less (eg: nearly all 4GB cards):
Copy the value in the 1500Mhz field, and then paste it into all of the fields after it (1625mhz, 1750mhz, 2000mhz). The easiest way to do this is to click anywhere inside the 1500mhz value, then press CTRL+A to highlight the entire string, and then press CTRL+C to copy it. Then you can simply click into the remaining fields and press CTRL+A followed by CTRL+V to paste over the existing value. - If you have a RX 470/480 that is factory clocked at 2000Mhz or more (eg: nearly all 8GB cards):
This is a bit trickier, but generally most cards will be most stable by simply copying the value in the 1750mhz field into the 2000mhz field. The easiest way to do this is to click anywhere inside the 1750mhz value, then press CTRL+A to highlight the entire string, and then press CTRL+C to copy it. Then you can simply click into the 2000mhz field and press CTRL+A followed by CTRL+V to paste over the existing value.
Step 4: Flash your modified BIOS back to your GPU
Now it’s time to write your custom BIOS back to your hardware. This can be a little scary if you’ve never attempted anything like this before, but generally if you’ve followed the steps as written, you shouldn’t have any issues. Again, there are no absolute guarantees, so proceed at your own risk!- Open ATIWinFlash back up.
- Click on the “Load Image” button and select the modded BIOS that you created in step 3.
- Click on the “Program” button to write the BIOS to your GPU. Your computer may appear to freeze for what might seem like a long time—this is normal.
- You’ll be prompted to reboot when ATIWinFlash finishes. Don’t reboot yet—we have one more thing to do. Go ahead and close ATIWinFlash, though.
- Unzip the ATI Pixel Clock Patcher utility that you downloaded and double-click atikmdag-patcher.exe. It should offer to apply a patch, let it. You only need to do this step once per GPU, even if you flash it multiple times. If you skip this step, when your computer reboots, the AMD display driver will refuse to load because it’ll detect that your GPU BIOS has been tampered with it.
- Go ahead and reboot after the patch is applied.
Step 5: Test your modified GPU BIOS
Now is a great time to fire up your miner and see what kind of difference your changes made.If you have a 4GB card, the timing change alone should be enough to get you from ~20 Mh/s to ~24 Mh/s. If you have a 8GB card, you likely went from ~24 Mh/s to ~28 Mh/s. We can do better, but that’s a pretty good start!
Power consumption will be unchanged (or even up slightly, due to the more aggressive timings), but we haven’t touched voltages yet.
Once you’ve recorded your GPU’s new metrics (speed, temperature/fan speed, power usage), we can move on.
Step 6: Find appropriate clock speed and voltage values for your GPU
Before we head back into Polaris BIOS editor to increase memory clock speed settings, it’s a good idea to have an idea of how high we can push them. It’s a lot easier (and faster) to make these tweaks in Windows via the driver (Radeon Settings/WattMan), and then once we’re confident on the proper values, write them to BIOS.So if you haven’t already, read step 12 of my Windows guide to get an idea of the process around overclocking and undervolting via driver-level edits. If you’ve already gone through the process, you’ll need to repeat it, as your new more-aggressive memory timings invalidate all of your previous data—you won’t be able to push the memory clock speed as high as you previously could (but performance will be much better).
Using Radeon Settings/WattMan in the manner that I describe in my Windows guide:
- Increase memory clock speed slowly until you see signs of system instability (incorrect share warnings in your miner, artifacts on screen, crashes)
- Decrease core clock speed slowly until it starts to significantly negatively impact performance
- Decrease memory voltage slowly until you see signs of instability (you may not be able to significantly lower memory voltage, depending on your card)
- Decrease core voltage slowly until you see signs of instability
Step 7: Write new clock speed and voltage values to GPU BIOS
Note that this step is not strictly necessary if you plan to use Windows for your miners long-term. You can certainly just dial in whatever values you found in the previous step at the driver/WattMan level and call it a day. I prefer to have everything done at the BIOS level, as then I don’t have to worry about software configuration, and can move GPUs between environments with ease.If you’re running Linux, this is the only way (currently, at least) to overclock and undervolt.
- Open Polaris BIOS Editor back up.
- Load the modified BIOS that you created in step 3 (click “OPEN BIOS” in the top left and browse for your modded .rom file).
- In the “Memory” area, carefully input your values for memory clock speed and voltage in the bottom row.
- In the “GPU” area, carefully input your values for core clock speed and voltage in the bottom row. You’ll probably be overwriting a 65xxx value in the voltage column—that’s ok.
- Still in the “GPU” area, fill in the table between the bottom row and the first row (but do not touch the first row!) with values that ramp up to whatever you entered in the bottom row. It isn’t super important to get these values “right”; you can look at the original table and see what percentage adjacent rows vary by, and just calculate new values that way.
The original factory BIOS is shown in step 2 for reference. Note that I’ve made absolutely no edits outside of the area I originally outlined in blue. I get over 25 Mh/s after the modifications (+25%), while using ~15% less power compared to stock. These changes are fairly conservative; I’m stable at nearly 27 Mh/s on this card with more aggressive settings, but the increase in power consumption isn’t worth it at my electricity rate.
If you’re looking for a good starting point, the settings pictured here should be stable in just about every 4GB card (in the timings section, just copy the 1500mhz value to every row below it).
When you’re done making your edits in Polaris, save your final BIOS (click “SAVE AS”) as a new file. Then open up ATIWinFlash and write the new .rom to your GPU (same as step 4). Reboot and test!
Comments
Post a Comment