Mirrors bc250-enable-40cu-arch.sh, adapted for Fedora:
- deps via dnf install kernel-devel-$(uname -r) gcc make zstd curl
- local source detection covers /usr/src/linux-$KVER (manually
extracted from kernel.src.rpm) before falling back to the kernel.org
download path inherited from the Arch variant
- error message points at the Fedora source-package workflow
(dnf download --source kernel, rpm2cpio, unpack linux-$KVER_BASE.tar.xz)
Tested end-to-end on Fedora 43 with kernel 7.0.9-105.fc43.x86_64:
build + install + reboot loads the patched module cleanly, dmesg
reports the CC/SPI writes on all 4 shader arrays, active_cu_number
40, vulkaninfo num_cu = 40. Backup chain works (.bc250-backup-DATE),
restore returns to stock 24 CU.
The Fedora kernel-devel package on 7.0.9 ships scripts/ and
arch/x86/tools/cpufeaturemasks.awk in full, so the standard
make -C $kbuild M=$amdgpu_dir build path uses kernel-devel for
vermagic and works without any EXTRAVERSION or utsrelease.h
patching (those were only needed when building inside the source
tree on older kernel-devel revisions).
8-page academic paper covering methodology, 4-state controlled
experiment, community harvest map survey (n=58), and dual-register
gating architecture. PDF and LaTeX source in docs/.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The second hunk header claimed 39 new lines but the actual content
has 40 (34 added + 6 context). This caused "malformed patch" errors
on CachyOS kernel builds.
Reported by Marcin on Discord.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Documents the WGP/CU mapping, disable_cu syntax, and the automated
health test + masking workflow. For boards with scattered harvest
patterns where some unlocked CUs may be defective.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- FP tolerance: iters/3 + 2 ULP (23 for default 64 iters) to account for
CPU vs GPU FMA rounding accumulation in chained operations. Integer
comparison remains exact.
- Verified: 100M checks, zero errors on both boards at 40 CU.
- Added cu_map.sh health overlay, CU health test, selective masking tool.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New tools for boards with scattered harvest patterns where unlocked
CUs may be defective:
- bc250-compute-verify.sh: Heavy Vulkan correctness test (FP32 FMA,
integer, bitwise, LDS) with per-element golden comparison
- bc250-cu-health-test.sh: Reboot-resuming 20-WGP isolation test using
amdgpu.disable_cu. Results to /var/lib/bc250-cu-health-test/results.tsv
- bc250-cu-mask.sh: Generates selective disable_cu= config from failed
WGPs — enables e.g. 38 of 40 CUs with bad ones masked
- cu_map.sh: Updated with --health overlay showing stock + healthy/failed
Usage:
sudo ./scripts/bc250-cu-health-test.sh start # full 20-WGP test
./scripts/bc250-cu-mask.sh --results results.tsv # generate mask
./scripts/cu_map.sh --health results.tsv # visual overlay
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The patch now uses amdgpu_gfx_parse_disable_cu + mutex_lock as context
anchors instead of line numbers. These function calls are present in
gfx_v10_0_get_cu_info() across all kernel versions (6.1+).
Removed fake git index hashes. Replaced em-dash with -- for ASCII safety.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Runs llama-bench pp512 at 24 CU, 40 CU, then 24 CU again with cooldown
between each state. Uses UMR to toggle SPI_PG_ENABLE_STATIC_WGP_MASK.
Auto-detects model, bench binary, and UMR paths.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Single kernel patch now handles all three register writes during driver
init. No UMR or systemd service needed post-boot.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Re-enable all 40 CUs on the AMD BC-250 (gfx1013 / Cyan Skillfish) via
two register writes during amdgpu driver init:
- CC_GC_SHADER_ARRAY_CONFIG: clears harvest enumeration mask
- SPI_PG_ENABLE_STATIC_WGP_MASK: enables hardware wave dispatch to all WGPs
Both required — neither alone is sufficient. Verified 1.61x compute
scaling at 1500MHz (pp512: 230 → 372 tok/s) via controlled A/B/A testing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>