Running A Modern Graphics Card In A 33 MHz PCI Slot

If you ever looked at a PCI to PCIe x16 adapter and wondered what’d happen if you were to stick a modern PCIe GPU in it, the answer apparently is ‘it works’ according to an attempt by [Circuit Rewind]. As long as you accept needing to supply external power with even a low-end GT 1030 card – as the PCI slot cannot provide enough power – and being limited to a single PCIe lane. This latter point isn’t so much of an issue as a single PCIe lane offers more bandwidth than the (shared) PCI bus anyway.

Despite the somewhat improvised setup, the GT 1030 card provided a decent 1080p experience in a range of games, after removing half of the 8 GB of system RAM before the configuration would work, probably due to VRAM mapping issues. Since the mainboard used also offered PCIe, the same card was run in a PCIe x4 slot, as well as in an x1 configuration, both with noticeably higher performance and putting the ‘why’ in ‘try’.

Perhaps unsurprisingly, a RTX 3080 also booted fine with external power and only 4 GB system RAM installed. Despite the PCIe x1 link, the system was able to finish a 3D benchmark and play Doom 2016, but with only 4 GB of system RAM and an old Athlon quad-core CPU, it was a terrible experience. Perhaps the most fascinating lesson to learn from this is that PCI and PCIe are amazingly compatible with only a simple translation bridge, even if high-performance graphics aren’t quite what PCI was meant for. After all, that’s why we got cursed with AGP for many years.

21 thoughts on “Running A Modern Graphics Card In A 33 MHz PCI Slot

  1. The problem with PCI and PCIe in this direction is that with PCI the configuration space per device was only 256 bytes. You can’t reach the full 4 kB of PCIe devices. So this will work only with devices that don’t have any necessary registers beyond 256 bytes.

    And removing one of two 4 GB DIMMs to allow the card to DMA to the whole RAM is not enough. Usually the chipset will leave a gap in physical address space for things like the BIOS flash. The computer I am sitting at right now maps 2GB at address 0 and 14 GB at 0x100000000.

    1. Is there any obvious reason you couldn’t create an adapter that uses multiple PCI slots to provide access to other registers? Why not just have a card function that remaps registers?

      At least some of those problems would likely be trivial to solve had it actually been deemed necessary or useful.

      1. It is possible to design bridges to provide access to the whole configuration space with some non-standard mechanism, but the OS and drivers expect access to be supported the normal way. The PEX8111 on the used card does in fact support remapping. It has an ECFGADDR register at offset 0x1064 of BAR 0 where you can select a single PCIe device. The 4kB configuration space of that device will then be accessible at offset 0x2000 of BAR 0.

        1. Hi Daniel, I’m trying to configure the PEX8111. I can access to the PCI config space but the mapped BAR0 is always empty (FF FF FF.. there), could you help with that?

          Here is my PCI config (all numbers are HEX):
          Status = 230 Command = 107
          BAR0 = F0000008
          BAR1 = 0
          Primary Bus = 0, Secondary bus = 1, subBus = 1
          IOBase = E0, IOLimit = E0, Secondary status = 2000
          PrefMemBase = BC00, PrefMemLimit = BFF0
          PrefBaseUp32 = 0, PrefLimitUp32 = 0
          IOBaseUp16 = 0, IOLimitUp16 = 0
          Capabilities = 40
          BridgeControl = 7
          DEVINIT = 23
          DEVSPECCTL = E2012

  2. What’s most surprising (to me) is that the drivers didn’t blink an eye about the fact that the card is on the PCI (non-express) bus. But I guess that fact is almost entirely abstracted away at the software level.

    1. The slot adapter contains a PLX chip which will be a PCI to PCI bridge that conforms to the PCI (and by extension, PCIe) specifications. So there really isn’t anything weird or exotic for the driver to have to deal with.
      Something like an eGPU connected via Thunderbolt will look pretty similar (but with the added complication of needing to deal with hotplugging).

      There are solid reasons the foundations established with PCI have survived for so long.

  3. Correct Me If I’m Wrong, But Many Cards have a low rez “Default” setting so video shows before drivers are loaded. Perhaps something like this is in play. (People are shocked to find out I’m not an electrical genus.)

    1. This is something that is covered in the video. When the RTX 3080 is plugged in, it defaulted to the generic Microsoft “Basic” driver (the thing you describe), and then downloaded the official Nvidia driver automatically. Without the official Nvidia driver, 3D rendering in Doom 2016 and 3DMark wouldn’t have been possible at all. This is indeed using full 3D GPU acceleration.

  4. I’m curious how much data is actually continuously streamed across the PCI/PCIe bus during modern gaming, compared to the insane amount of bandwidth actually available on a PCIe bus. Would it be unreasonable to bet that the number of modern games that – in a hypothetical machine that was able to have a modern high-end CPU, RAM and GPU but also a PCI slot – would run unhindered by the 133MB/s bandwidth of PCI is more than zero?

    1. Any game that loads all assets (wireframes,textures,shaders) at one time (beginning of level) and then only issues commands for the GPU to act on the data would theoretically experience minimal bottleneck.

      Games that actively stream in data mid level or as new players get closer may have a worse time.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.