Foundry/barswap/CARDS.md

119 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Compatible GPU Cards — BTC-S37 / 8× K80 rig
## Rig Constraints
- **Board:** BTC-S37 (8 PCIe slots, x1/x4 electrical)
- **CPU:** Intel Pentium 2117U (Ivy Bridge, 36-bit physical address = 64 GB max)
- **RAM:** 8 GB DDR3
- **GPUs installed:** 8x K80 (16 dies, 192 GB VRAM) — all 16 dies tested and passing
- **PSU:** 3x 750W (2,250W total)
- **MMIO budget:** ~56 GB (64 GB address space minus 8 GB RAM)
- **Working BAR1 slot:** 0xC00000000 (16 GB, the only slot that routes correctly)
- **Driver:** nvidia 470 (supports Kepler through Turing)
- **CUDA:** 11.4 (sm_35 through sm_86)
## Card Compatibility Table
| Card | Arch | sm | VRAM | Mem BW | FP16 TFLOPS | INT8 TOPS | BAR1 | TDP | Power Conn | Slots | Bar Swap? | Max on Board | Status |
|------|------|----|------|--------|-------------|-----------|------|-----|------------|-------|-----------|--------------|--------|
| **K80** | Kepler | 37 | 2x12 GB | 240 GB/s/die | 0.37/die | — | 16 GB | 300W | 1x8-pin | 2 (dual) | Required | 8 (16 dies) | **16/16 passing** |
| K40 | Kepler | 35 | 12 GB | 288 GB/s | 0.43 | — | 16 GB | 235W | 1x8-pin | 2 (full-length) | Required | 3-4 | Compatible |
| K20X | Kepler | 35 | 6 GB | 250 GB/s | 0.39 | — | 8 GB | 235W | 1x8-pin | 2 (full-length) | Required | 3-4 | Compatible |
| M40 24GB | Maxwell | 52 | 24 GB | 288 GB/s | 0.21 | — | 16 GB | 250W | 1x8-pin | 2 (full-length) | Required | 3-4 | Likely works |
| M60 | Maxwell | 52 | 2x8 GB | 160 GB/s/die | 0.15/die | — | 16 GB | 300W | 1x8-pin | 2 (dual-die) | Required | 3 (6 dies) | Likely works |
| **P100 PCIe 16GB** | Pascal | 60 | 16 GB HBM2 | 732 GB/s | 21.2 | — | 16 GB | 250W | 1x8-pin | 2 (full-length) | Required | 3-4 | Likely works |
| P4 | Pascal | 61 | 8 GB | 192 GB/s | 5.5 | 22 | 256 MB | 75W | None | 1 (low-profile) | Not needed | **8** | Likely works |
| **V100 PCIe 16GB** | Volta | 70 | 16 GB HBM2 | 900 GB/s | 28.3 | — | 16 GB | 250W | 1x8+6-pin | 2 (full-length) | Required | 3-4 | Likely works |
| **T4** | Turing | 75 | 16 GB GDDR6 | 320 GB/s | 65 | 130 | 256 MB | 75W | None | 1 (low-profile) | Not needed | **8** | Likely works |
**INT8 TOPS note:** Cards marked `—` have no hardware INT8 dot product. Kepler and Maxwell lack INT8 math entirely. Pascal sm_60 (P100) has FP16 Tensor-like throughput but no INT8 path. Volta Tensor Cores only accelerate FP16→FP32 mixed precision, not INT8. The first INT8 dot product arrived with Pascal sm_61 (P4) via the `dp4a` instruction, and Turing (T4) added INT8 Tensor Core mode for a massive throughput jump. On cards without INT8 hardware, INT8 data must be upcast to FP32 for computation — no speed benefit over FP32 math.
### Cards That Will NOT Fit
| Card | Reason |
|------|--------|
| V100 32GB | BAR1 = 32 GB, exceeds single working 16 GB slot |
| P40 24GB | BAR1 = 32 GB |
| A30 24GB | BAR1 = 32 GB, also needs driver 495+ |
| A100 40/80GB | BAR1 = 64/128 GB, needs driver 495+ |
| H100 | BAR1 = 128 GB, needs driver 525+ |
| Any card with BAR1 > 16 GB | Only one 16 GB MMIO slot available at 0xC00000000 |
## Notes
### Bar Swap vs No Bar Swap
Cards with BAR1 <= 16 GB need bar_swap because only one 16 GB MMIO slot works on this board. All such cards share the slot via time-multiplexing. Only one die is mapped at a time.
Cards with BAR1 = 256 MB (P4, T4) have a small enough MMIO footprint that all 8 fit simultaneously in the address space (8 x 256 MB = 2 GB, well within the 56 GB MMIO budget). The nvidia driver manages VRAM internally through page tables — the 256 MB window is enough for the driver to function. Bar_swap is not needed because all cards are visible to nvidia at once. Standard multi-GPU CUDA works out of the box.
### Current Rig: 8x K80 (16 Dies, 192 GB VRAM)
The board currently has 8 K80 cards installed. 3 cards (6 dies) are tested and working with bar_swap. The remaining 5 cards (10 dies) are installed but untested.
All 16 dies tested and passing (2026-03-25):
- 192 GB total VRAM
- All 16 dies time-multiplexed through the single 0xC00000000 BAR1 slot
- Enough VRAM to hold a 70B+ model in FP16 or a 140B+ model in INT8
- ~1.2ms acquire time per die, ~2.5s full cycle (with nvidia load/unload)
- Power: 8x 300W = 2,400W (needs 30A breaker for sustained load)
### T4 — Best Upgrade Option
8x T4 is the most interesting configuration for this board:
- 128 GB total VRAM (vs 192 GB with 8x K80)
- 520 TFLOPS FP16 / 1,040 TOPS INT8 (vs ~17 TFLOPS FP16 with K80s)
- 600W total power, no power cables (vs 2,400W + cables)
- Single-slot passive cooling — designed for dense server deployment
- All 8 visible to nvidia simultaneously, standard multi-GPU CUDA
- Used price: ~$150-200 each (~$1,200-1,600 for 8)
### P4 — Budget Small-BAR Option
8x P4 is the budget version of the same idea:
- 64 GB total VRAM (8x 8 GB)
- Pascal sm_61 (same as GTX 1080)
- 75W, no power cables, single-slot, passive
- Cheaper than T4 (~$50-80 used)
- Less compute than T4 but still faster than K80
### P100 / V100 16GB — Maximum Single-Card Performance
These are the fastest cards that fit the 16 GB BAR1 slot:
- P100: ~21 TFLOPS FP16, 16 GB HBM2 (732 GB/s bandwidth)
- V100 16GB: ~125 TFLOPS FP16, 16 GB HBM2 (900 GB/s bandwidth)
- Both require bar_swap (16 GB BAR1)
- A single V100-16GB through bar_swap outperforms all 16 K80 dies in compute
### PCIe Bandwidth
All BTC-S37 slots are x1 or x4 electrical:
- PCIe 2.0 x1: 500 MB/s
- PCIe 3.0 x1: 1 GB/s
- PCIe 3.0 x4: 4 GB/s
This limits host-to-device transfers (model weight uploads) but does not affect on-device compute. With VRAM persistence (bar_swap) or standard multi-GPU (T4/P4), weights are uploaded once and stay resident.
### Driver Compatibility
| Driver | Architectures Supported |
|--------|------------------------|
| 470 (installed) | Kepler, Maxwell, Pascal, Volta, Turing |
| 495+ | Adds Ampere (sm_80/86) |
| 525+ | Adds Hopper (sm_90) |
Driver 470 covers all cards in the compatibility table. No driver change needed.
### Dual-Die Cards
K80 and M60 are dual-die cards (2 GPUs on one PCB) connected via an on-card PLX PEX 8747 switch. The BTC-S37 already handles this topology — the PLX downstream ports appear as separate PCI devices. Bar_swap treats each die independently.
### What Has NOT Been Tested
- All 8 K80 cards (16 dies) tested and passing with bar_swap as of 2026-03-25
- No card other than K80 has been tested on this board
- BAR1 sizes for non-K80 cards are based on published specs and typical configurations
- T4/P4 small-BAR behavior assumes the card does not request resizable BAR expansion on a board that doesn't support it (expected behavior, but unverified)
- BIOS compatibility with non-Kepler cards is assumed but not confirmed
- 8x K80 power draw (2,400W) may exceed PSU capacity — verify PSU wiring before testing all 8 cards under load