Files
TheRock/rocm-libraries/shared/stinkytofu/README.md
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

173 lines
4.7 KiB
Markdown

# StinkyTofu
StinkyTofu is an LLVM-inspired pass-based IR optimizer for AMD GPU assembly kernels. It is used by hipBLASLt/TensileLite to schedule and optimize generated GPU code for gfx1250.
## Features
- **Two-level IR**: High-level Logical IR (architecture-agnostic) and low-level Asm IR (architecture-specific)
- **Pass pipeline**: DAG scheduling, wait count insertion, dead code elimination, redundant mov elimination, peephole optimization
- **TableGen-based instruction definitions**: New architectures require only `.def` files, no C++ changes
- **FileCheck-style testing**: LLVM-style lit tests with `stinkytofu-check`
- **Python bindings**: Full IR construction and optimization accessible from Python via nanobind
## Prerequisites
- [CMake](https://cmake.org/) >= 3.16
- [Ninja](https://ninja-build.org/)
- [ROCm SDK](https://github.com/ROCm/TheRock/blob/main/RELEASES.md) (provides `amdclang++`)
### Windows additional setup
Enable long paths (run as Administrator):
```cmd
reg add HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f
```
Install Visual Studio Build Tools:
```cmd
winget install --id Microsoft.VisualStudio.2022.BuildTools --source winget --override "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.VC.CMake.Project --add Microsoft.VisualStudio.Component.VC.ATL --add Microsoft.VisualStudio.Component.Windows11SDK.22621"
```
## Build
### Python environment
Python 3.12 with a virtual environment is recommended for both platforms:
```bash
python3.12 -m venv .venv
source .venv/bin/activate # Linux
.venv\Scripts\activate # Windows
```
**Note:** Avoid installing Python from the Microsoft Store on Windows — its path contains spaces, which breaks Ninja. The build falls back to NMake (single-threaded). Install Python from [python.org](https://www.python.org/) instead.
When using ROCm SDK, install it into the venv:
```bash
pip install rocm-sdk
rocm-sdk init
```
### Standalone (Linux)
The quickest way is `invoke`, which wraps the CMake steps:
```bash
pip install invoke
invoke build
```
Or manually with CMake:
```bash
cmake -S . -B build -GNinja \
-DCMAKE_CXX_COMPILER=amdclang++ \
-DCMAKE_C_COMPILER=amdclang \
-DCMAKE_BUILD_TYPE=Debug
cmake --build build
```
### Standalone (Windows)
```bash
pip install invoke
invoke build
```
### As part of hipBLASLt
StinkyTofu is automatically built when hipBLASLt includes it via `add_subdirectory`. Tests and Python bindings are disabled in sub-project mode.
### Rebuilding Python bindings after C++ changes
If you modify C++ sources, the installed `.so` becomes stale. Importing `stinkytofu` will raise an `ImportError` listing the modified files.
**Standalone** — rebuild with invoke or CMake directly:
```bash
invoke build
# or:
cmake --build build --target stinkytofu_python
```
**As part of hipBLASLt** — rebuild the Python bindings target in your hipBLASLt build directory:
```bash
cmake --build <build_dir> --target stinkytofu_python
```
## Run clang-tidy
We use `clang-tidy-20`, so additional installation may required.
### 1. Download and Run the LLVM Setup Script
This script automatically detects your OS distribution, adds the correct LLVM stable/nightly APT repository, and updates your package lists[span_2](start_span)[span_2](end_span).
```bash
# Get the official script and make it executable
wget [https://apt.llvm.org/llvm.sh](https://apt.llvm.org/llvm.sh)
chmod +x llvm.sh
# Run the script to add repositories
sudo ./llvm.sh 20 reponly
```
### Install `clang-tidy-20`
```bash
sudo apt-get update
sudo apt-get install -y clang-tidy-20
```
### Run clang-tidy
```bash
invoke build
invoke tidy
```
## Test
```bash
# All tests
cd build && ctest
# Unit tests only
./build/tests/unit_tests
# Single test
./build/tests/unit_tests --gtest_filter="DAGSchedulerPassTest.*"
# FileCheck tests
cd build && ctest -R FileCheck
```
## Architecture
```
hardware/*.def --> TableGen --> generated .inc files
|
gfxisa library
|
stinkytofu library --> tools / Python bindings
```
- `hardware/` - Per-architecture instruction definitions (`.def` files)
- `include/stinkytofu/` - Public headers
- `src/` - Library implementation (IR, passes, serialization, pipeline)
- `tools/` - `stinkytofu-opt`, `stinkytofu-check`, `intrinsic-compiler`
- `tests/` - Unit tests and FileCheck tests
- `python_module/` - Python bindings
## Documentation
See [docs/](docs/README.md) for detailed documentation including user guides, developer guides, and design documents.
## License
This project is licensed under the MIT License. See [LICENSE.md](LICENSE.md) for details.