After Nvidia‘s release of “Resizable BAR” memory support for the RTX 3060 at launch, Nvidia has now extended this feature to all RTX-30 series cards.
This means that for a select number of games, it is possible to see a performance boost when Resizable BAR is enabled.
But is Resizable BAR support only enabled for gaming as of now? What about Deep Learning, is Tensorflow or Pytorch going to be able to benefit from this new feature anytime soon?
What is Resizable BAR
Without Resizable BAR support, the CPU can only access 256 MB of GPU memory at a time. This means that whenever the graphics card, requests for large assets such as textures, shaders, or geometry to be transferred to VRAM, the CPU can only transfer the data in small chunks(up to 256MB in size) at a time. Not only that, all these transfers are done sequentially further hindering performance.
With Resizable BAR, the 256MB limit is removed entirely and it is possible now for the CPU to access the entire VRAM address space at once.
This means that now the GPU can request large assets to be transferred in a single operation, rather than many small operations. Also, all these transfers of memory between the CPU and the GPU can also be done in parallel, further improving performance.
Is Resizable BAR new?
You might think that Resizable BAR is a 2020 invention, but actually, it is not.
Resizable BAR was originally proposed by AMD and HP as a standard in 2008 as part of the PCIe 2.0 revision. At that time there was a limit of 512GB address space limit to the Resizable BAR. But in 2016 with PCIe 3.0 revision, that limit was removed to cover the entire address space of the VRAM.
Resizable BAR — Why only now?
Resizable BAR was originally proposed in 2008 but It was only in 2020 that AMD somehow dusted off this section of the PCIe specification, gave it a cool new name, Smart Access Memory, and used the Resizable BAR specification to its full potential, removing the artificial 256 MB bandwidth limit which by now had become a bottleneck. And of course, AMD made it an exclusive feature for AMD Ryzen 5000 and Radeon RX 6000 series.
Up to then, the 256MB limit was not really a problem. Only in recent years, with ever-faster CPUs and GPUs, and with games having increasingly larger textures and more complicated geometries combined with more heated competition between AMD and Nvidia in the GPU space. Only then, the 256MB limit had become a bottleneck worthy to be removed.
With the added incentive being to beat the competition, of course.
Nvidia’s Resizable BAR support— response to AMD Smart Access Memory
When AMD released Smart Access Memory exclusively for AMD Ryzen 5000 series CPUs and AMD Radeon GPUs with great fanfare, Nvidia was quick to point out that AMD Smart Access Memory was not an exclusive feature at all.
Rather it was part of the PCIe specification. And Nvidia revealed that they were working hard to also implement this feature via a software update for Ampere GPUs. This is a great example that proves how healthy competition is a good thing!
Nvidia launches Resizable BAR support for all RTX 30 series cards
As promised Nvidia launched Resizable BAR support with the release of the RTX 3060 cards in February. And as of the 30th of March 2021, Nvidia has made the new feature available to all RTX 30 series cards.
Is Resizable BAR support coming to RTX 20 series cards?
Since Resizable BAR is a feature available in PCIe 3.0 revision, and it can be enabled simply by a driver and BIOS update, it makes sense that Resizable BAR should be extended to RTX 20 series cards, or even GTX cards, in addition to the 30 series. why not?
It is unlikely to happen since Nvidia doesn’t normally revisit old generations of their graphics cards. It definitely makes sense from a business point of view. You want to incentivize everyone to buy new shiny hardware!
But one could argue, that with the current state of the GPU market and with the general lack of availability of 30-series cards, that Nvidia ought to release this feature for older generations of GPUs, especially given the reports that they have decided to bring them back from the scrapyard.
Don’t hold on to your breath, but you never know!
How to enable Resizable Bar Support?
First of all, be sure that you own an RTX-30 series card. Unfortunately, as stated earlier, Nvidia, has only released this feature for Ampere cards.
Also, you need to check that your CPU and Motherboard, support this feature. The supported list of CPUs includes AMD Zen 3(5000 series) and Intel 10th and 11th generation CPUs. The exact list is provided by Nvidia on their website. Be sure to check it out.
Once you know that your hardware supports “Resizable BAR”, then you need to update your Nvidia game-ready driver to the latest, your Motherboard BIOS also should be updated, and finally, you will probably need to update your GPU VBIOS. Unless of course, you are lucky to own an RTX-3060 card that has Resizable BAR enabled by default.
Note that each GPU board manufacturer has its own VBIOS, so you will need to check the appropriate website to download the relevant BIOS updates.
I have already enabled Resizable BAR support on my PC
I have already gone ahead and enabled support for Resizable BAR to my RTX 3070 series card. I own a Ryzen 5900X, a Gigabyte RTX 3070 Eagle, and an Asus Strix ROG 570-E Gaming motherboard. The process was not that easy, but not rocket science either. But be careful, you need to ensure that you know what version of VBIOS you should be updating to. The last thing you want to do is to brick your GPU.
The motherboard itself, at least in mine because it comes with BIOS USB flashback, it’s very easy to recover from mistakes. And yes, you can buy one easily(10 for the price of a GPU in average).
But not so easy when you brick your GPU. You have to protect it at all costs!
I have written a small guide soon showing the steps I had to cover to enable Resizable BAR support in my PC.
What about Deep Learning — Will CUDA support Resizable BAR anytime soon?
First the disclaimer. I am not a Deep learning or hardware expert. I just have a fanboy passion for both topics. I also have no insider knowledge of what Nvidia’s roadmap looks like. So here I am expressing mainly my opinion and the results of my own research.
It seems to me that, for large training data sets that need to be constantly swapped in and out of GPU/VRAM memory during training, Resizable BAR should give positive performance improvements. It seems like a no-brainer, right?
But from the limited research I have done, I couldn’t find any mention of Resizable BAR support in any drivers(e.g. for data centers) except for Nvidia’s game-ready drivers.
CUDA as of the time of writing is on version 11.2.2, and there are no references to Resizable BAR support in the release notes too.
Even if Resizable BAR was already supported in CUDA, Tensorflow is normally significantly behind in supporting the latest CUDA version(Currently only 11.0 is officially supported).
But if Resizable BAR really can boost performance for machine learning workloads,and I don’t see why not, we are sure to see Nvidia in the near future to add support to CUDA too. It is just a matter of time.
Until then I encourage you to enable Resizable BAR only if you are a gamer.