Automatically discover what works on AMD Strix Halo (gfx1151) by testing all software stack combinations.
AMD Strix Halo has a rapidly evolving software stack with constant compatibility breakage:
HSA_ENABLE_SDMA=0 required for stability, but not documentedManually testing every combination is dependency hell.
SoftAb provides:
Stop guessing. Test everything. Document what works.
✅ Use SoftAb if you want to answer:
HSA_ENABLE_SDMA affect performance?❌ Don’t use SoftAb if you want to answer:
SoftAb focuses on software stack configuration, not model comparisons or inference tuning.
Failures are valuable data.
When you upgrade your kernel and half your containers break, SoftAb helps you:
This isn’t just about finding the fastest config - it’s about navigating dependency hell systematically instead of trial-and-error.
SoftAb uses a principled experimental approach:
Key insight: You don’t know what works until you test it. Automated testing beats manual trial-and-error.
Example: You just upgraded to kernel 6.18.6 and want to know what still works.
# 1. Create experiment directory
cp -r experiments/TEMPLATE experiments/2026-01-26_kernel-6.18.6-test
cd experiments/2026-01-26_kernel-6.18.6-test
# 2. Record environment (captures kernel version, firmware, etc.)
./record-environment.sh > ENVIRONMENT.txt
# 3. Edit run-all-benchmarks.sh to test a matrix of configs
# Test everything: Vulkan, ROCm 6.4.4, ROCm 7.2, TheRock nightlies
# 4. Run tests - many will fail, that's the point
./run-all-benchmarks.sh
# Results:
# - Vulkan configs: ✅ All work (Vulkan doesn't care about kernel)
# - Standard ROCm 6.4.4/7.2: ❌ Fail with "invalid device function"
# - TheRock nightlies: ✅ Work (built for newer kernels)
# - PyTorch Fedora repos: ❌ Fail to compile
# 5. Ask LLM to analyze raw_results/*.log
# "Which configurations work on kernel 6.18.6? What are the error patterns?"
# 6. Document in FINDINGS.md:
# "Kernel 6.18.6 breaks all standard ROCm. Use TheRock nightlies or Vulkan."
Value: You now have a compatibility matrix for kernel 6.18.6 that helps you and the community.
| Variable | Options |
|---|---|
| GFX target | gfx1100, gfx1150, gfx1151, gfx1152 |
| Driver | AMDVLK, RADV |
| ROCm version | 6.4.4, 7.0, 7.1.1, 7.2, TheRock nightlies |
| ROCm source | Fedora repos, AMD repos, TheRock pip |
| Backend | Vulkan, ROCm HIP, HIP+rocWMMA |
| Python version | 3.11, 3.12 |
| Environment vars | SDMA, hipBLASLt, allocator configs |
| Flash Attention | Enabled, Disabled |
We test four representative workloads:
One representative model per workload for simple tests. Extended benchmarks use multiple model sizes.
New users: See QUICKSTART.md for a 5-minute system test and 15-minute experiment walkthrough.
Experienced users:
# 1. Create experiment
cp -r experiments/TEMPLATE experiments/$(date +%Y-%m-%d)_test
cd experiments/$(date +%Y-%m-%d)_test
./record-environment.sh > ENVIRONMENT.txt
# 2. Build images
cd /home/tc/softab
./docker/build-matrix.sh build-llama
# 3. Run benchmarks
cd experiments/$(date +%Y-%m-%d)_test
./run-all-benchmarks.sh
# 4. Analyze results (use LLM on raw_results/)
softab/
├── README.md # This file
├── QUICKSTART.md # 5-minute getting started guide
├── KNOWLEDGE_BASE.md # Community knowledge index
├── QUICK_REFERENCE.md # Command cheatsheet
├── verify-strix-halo.sh # System verification
│
├── docs/ # Detailed documentation
│ ├── hardware-specs.md # Strix Halo specifications
│ ├── rocm-support.md # ROCm compatibility
│ ├── applications.md # Software support status
│ ├── troubleshooting.md # Known issues & fixes
│ └── community-resources.md # Community links & glossary
│
├── docker/ # Container images (~91 Dockerfiles)
│ ├── build-matrix.sh # Canonical image builder
│ ├── base/ # Base images
│ ├── rocm/ # ROCm variants
│ ├── pytorch/ # PyTorch configs
│ ├── llama-cpp/ # llama.cpp backends
│ ├── whisper-cpp/ # whisper.cpp backends
│ ├── pyannote/ # pyannote configs
│ ├── vllm/ # vLLM configs
│ └── toolbox/ # Fedora Toolbox environments
│
├── benchmarks/ # Workload benchmarks
│ ├── *-simple.sh # Does it work? (phase 1)
│ └── *-bench.sh # How well? (phase 2)
│
├── experiments/ # Experiment framework
│ ├── README.md # Methodology guide
│ ├── TEMPLATE/ # New experiment template
│ └── YYYY-MM-DD_name/ # Your experiments
│
├── scripts/ # Ablation tools
│ ├── ablation-*.sh # Specific ablation tests
│ └── download-models.sh # Model downloader
│
├── tests/ # Legacy test suite
└── samples/ # Test data
Run FIRST to identify working configurations:
benchmarks/pytorch-simple.sh IMAGE_NAME
benchmarks/llama-simple.sh IMAGE_NAME MODEL_PATH
benchmarks/whisper-simple.sh IMAGE_NAME AUDIO_PATH
Run SECOND on working configurations:
benchmarks/pytorch-gemm.sh IMAGE_NAME [MATRIX_SIZE] [ITERATIONS]
benchmarks/llama-bench.sh IMAGE_NAME MODEL_PATH
benchmarks/whisper-bench.sh IMAGE_NAME AUDIO_PATH
Run THIRD on promising configurations:
See scripts/ for extended benchmark scripts.
# 1. Create experiment
cp -r experiments/TEMPLATE experiments/2026-01-26_rocm-versions
cd experiments/2026-01-26_rocm-versions
# 2. Record environment
./record-environment.sh > ENVIRONMENT.txt
# 3. Build images (from project root)
cd /home/tc/softab
podman build -t softab:llama-hip-rocm644 -f docker/llama-cpp/Dockerfile.hip-rocm644 .
podman build -t softab:llama-hip-rocm711 -f docker/llama-cpp/Dockerfile.hip-rocm711 .
podman build -t softab:llama-hip-rocm72 -f docker/llama-cpp/Dockerfile.hip-rocm72 .
# 4. Edit run-all-benchmarks.sh to specify these images
cd experiments/2026-01-26_rocm-versions
nano run-all-benchmarks.sh
# Add to IMAGES array:
# "softab:llama-hip-rocm644"
# "softab:llama-hip-rocm711"
# "softab:llama-hip-rocm72"
# 5. Run benchmarks
./run-all-benchmarks.sh
# 6. Analyze results
# Review raw_results/*.log
# Use Claude to summarize findings
# Document in FINDINGS.md
✅ Always commit:
benchmarks/, scripts/)experiments/TEMPLATE/)ENVIRONMENT.txt - System configuration snapshotFINDINGS.md - LLM-analyzed summary and conclusionsREADME.md - What you tested and whydocs/, *.md)❌ Never commit:
experiments/*/raw_results/*.log)results/)*.gguf, *.wav, models/, /data/)*.o, *.so)__pycache__/, *.pyc).venv*/).vscode/, .idea/)Raw logs are too large: A single experiment run can generate 100+ MB of logs. Instead:
Models are downloaded separately: Models can be 10-100 GB. Use scripts/download-models.sh or document download instructions instead.
Example experiment commit:
experiments/2026-01-26_rocm-version-comparison/
├── ENVIRONMENT.txt # ✅ Commit (kernel, firmware, etc.)
├── FINDINGS.md # ✅ Commit (LLM analysis, conclusions)
├── README.md # ✅ Commit (what you tested)
├── run-all-benchmarks.sh # ✅ Commit (methodology)
└── raw_results/ # ❌ Ignored by git (too large)
├── image1_bench.log # Analyze → summarize in FINDINGS.md
└── image2_bench.log
The .gitignore file already handles this policy. If you accidentally committed large files:
# Remove large files from git history
git rm --cached models/*.gguf
git rm --cached experiments/*/raw_results/*.log
# Commit the removal
git commit -m "Remove accidentally committed large files"
MIT