doug.sh

Building things with keyboards and end mills. Rabbit holes included.

gpu-unlock on Two RTX 3090s: Faster Prefill, No Decode Gain

Nov 11, 2026
gpu-unlock lifts the half-rate cap on RTX 3090 BF16 tensor cores: matrix math 61 to 91% faster, vLLM prefill up 13 to 20%, no decode gain.

GPU P2P On vs Off: Tensor Parallel LLM Serving on Four R9700s

Nov 11, 2026
With GPU peer-to-peer (P2P) off, four Radeon AI PRO R9700s at tensor parallel 4 lost 45 to 55% of prefill speed, 30% of decode and 53% of 16-client throughput.

Fitting Four 32 GB Resizable BARs Behind a PCIe Switch on Linux

Nov 9, 2026
Linux 7.0 sized a PCIe switch's bridge window too small for four 32 GB GPU BARs (can't assign; no space). A kernel module that pads the BARs fixes it.

Counting PCI Address Space for Resizable BAR on Six GPUs

Nov 9, 2026
Why a motherboard with 128 GB of RAM won't POST with Resizable BAR on six GPUs: its 64-bit PCI window only has room for five 32 GB BARs.

Six GPUs on One x16 Slot: R9700s and RTX 3090s Behind a PCIe Switch

Nov 8, 2026
Four Radeon AI PRO R9700s and two RTX 3090s behind a PEX88096 switch on one X570 slot: BIOS, kernel flags, ROCm and CUDA, and Qwen3.8-27B at 601 tok/s.

PCIe Bifurcation vs PCIe Switches and Retimers for Multi-GPU Builds

Nov 8, 2026
What bifurcation risers, retimers and PCIe switch (PLX) cards do for a multi-GPU box, with peer-to-peer copies at 54.7 GB/s inside a PEX88096 and what ACS costs.

Debugging PCIe Link Retraining on an x8/x8 Splitter with Two RTX 3090s

Sep 27, 2026
Two RTX 3090s on a bifurcated x8/x8 splitter hung vLLM with timeouts and GPU errors. The fix was two PCIe register bits and a gen3 lock at boot.

Custom Models in Oh My Pi: vLLM, llama.cpp, SGLang and More

Sep 23, 2026
How to point Oh My Pi at vLLM, llama.cpp, SGLang, and other local servers or a gateway, plus two config fixes for omp 18.2.7 and later.

Keeping vLLM's Prefix Cache Warm Between Agent Turns

Sep 15, 2026
What vLLM's cache tiers hold, why coding agent traffic keeps invalidating them, and the Bifrost tool schema bug that cost 90 to 180 seconds on the turns it hit.

Tuning a Local Coding Agent: Oh My Pi and Qwen3.8-27B on Two RTX 3090s

Sep 13, 2026
How I cut a self-hosted coding agent's wait per turn from 28 seconds to 7 with Oh My Pi, a thinking budget and a warm vLLM prefix cache.