Release v3.8.0
Wave v3.8 Release
New Website – Launched a new website to help users learn more about Wave and explore its features: https://www.wave-lang.com/
New Ops and Kernels
- TopkOp Implementation — Implements TopkOp, modeled after ReduceOp, using iterative reduction and masking (similar to sglang’s moe_topk_softmax kernel). #277
- RoundOp Added — Introduced RoundOp for Wave kernels. #283
- Implement Broadcasting for SelectOp — Generalized broadcast handling from binary ops to any-arity ops, used by Topk and similar kernels. #251
- [WMMA] v_wmma_f32_16x16x16_f16 Type Support — Added RDNA MMA type for 16×16×16 mixed-precision matrix operations. #306
- Binary Ops Lowering — Added lowering support for binary operations to expand backend compatibility. ftynse/water#36
- Distributed GEMM Across Multi-GPU Devices — Enables distributed matrix multiplication with per-dimension device partitioning via DeviceConstraint. #302
- Dynamic AtomicOp Indexing — Adds mapping_dynamic_vals for runtime-computed indices in atomic operations (used in MoE alignment). #269
Kernel Optimization
- Linearize Shared Memory Accesses — Linearizes shared-memory reads/writes to improve register reuse and enable better common subexpression detection. #275
- Scalarize Packed Math — Added option to scalarize packed addf/mulf near MFMA ops to avoid hardware-induced performance penalties. #274
- Hardware Transpose Support (gfx950+) — Enables amdgpu.transpose_load for native hardware transpose on MI350+ GPUs. #285
Compiler Enhancements
- Normal Forms Framework — Introduces WaveNormalFormAttr for enforcing IR invariants and managing pass pre-/post-conditions at fine granularity. ftynse/water#41, ftynse/water#57
- Dataflow-Based Shape Inference — Adds forward/backward dataflow analysis for shape inference, ensuring convergence and conflict detection. ftynse/water#20
- Hyperparameter and Index Mapping Attributes — Adds WaveHyperparameterAttr and WaveIndexMappingAttr for symbol–value mappings and affine index modeling. ftynse/water#23, ftynse/water#30, ftynse/water#42
- Lowering Pipeline Setup + RegisterOp Lowering — Establishes type converter (wave.tensor → vector/memref) and first lowering pattern (RegisterOp). ftynse/water#28
- Wave Dialect GEMM Representation — Adds high-level and lowered GEMM kernels using new MMA type variants. ftynse/water#27
- Wave Dialect Initialization — Created base dialect structure with symbol attributes, tensor types, symbolic shapes, and minimal MMA op. ftynse/water#17
- Wave Dialect MLIR Converter & Emitter Smoketest — Added converter and water emitter to translate Wave kernel traces into MLIR Wave dialect. #273
- Partition Gathers/Scatters Pass — Moved gather/scatter decomposition into a standalone pass for cleaner read/write handlers. #259
Scheduling / Runtime Improvements
- Standalone Multi-Device Runtime Wrapper — Introduces MultiDeviceLaunchable, a minimal API for executing IREE models across multiple GPUs. #222
- Full Trace Preservation After Compilation — WaveKernel now stores full post-pass traces for accurate Wave dialect emission and debugging. #298
Documentation / Developer Experience
- Normal Forms Documentation — Added detailed explanation of normal form concepts, invariants, and pass conditions. ftynse/water#57
- Wave Dialect Python Bindings — Added C API, Python bindings (water_mlir.dialects.wave), and CI integration for build verification. ftynse/water#19
- Debug Env Var for Location Control — Added environment variable to dynamically control debug location levels for easier inspection. #289
Change Log
Git History
What's Changed
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #272
- hip-iree-target parsing non-colon fix by @lamikr in #271
- Remove some unused TK remains. by @Hardcode84 in #268
- Bump the github-actions group with 3 updates by @dependabot[bot] in #276
- Change ROCm7 [docker installation] with TheRock in mi35x CI runner by @sa-faizal in #263
- Replace target-backends with target-device argument by @panditsa in #221
- Scalarize packed math by @Hardcode84 in #274
- [Wave] Linearize shared memory accesses by @raikonenfnu in #275
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #281
- Multibuffer liveness analysis by @Hardcode84 in #250
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #286
- add round op by @saladpalad in #283
- Capture locations for Iterate and Conditional by @willghatch in #290
- Add trace to WaveKernel even when only compile to MLIR by @tyb0807 in #294
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #293
- [Dist.] Standalone multi-device runtime wrapper by @panditsa in #222
- Store full trace after all compilation passes in WaveKernel by @tyb0807 in #298
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #299
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #303
- Bump the github-actions group with 2 updates by @dependabot[bot] in #300
- Add a dedicated pass to partition gathers/scatters by @Hardcode84 in #259
- add debug env var to set default location level by @willghatch in #289
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #305
- Integrate Water sources from a separate repository by @ftynse in #288
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #307
- [CI] Add GitHub Actions workflow: self-hosted RDNA4 by @Megan0704-1 in #295
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #309
- Bump actions/setup-python from 5.6.0 to 6.0.0 in the github-actions group by @dependabot[bot] in #310
- implement broadcasting for SelectOp by @willghatch in #251
- add locations to placeholder and output nodes based on kernel location by @willghatch in #291
- Fix version mismatch after iree-bump by @Megan0704-1 in #319
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #321
- Fixes
group_size_min the reordered gemm. by @xintin in #316 - [debugging] propagate locations by @willghatch in #297
- [debugging] add location propagation to replace_all_uses_with by @willghatch in #296
- Remove migration notice from README by @harsh-nod in #317
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #324
- add location_check_pass by @willghatch in #292
- [debugging] fix minor nit in test case by @willghatch in #323
- Add support for hardware transpose operation by @ashay in #285
- [CI] Update installation of user space libraries for RDNA4-CI by @Megan0704-1 in #325
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #326
- Added C-style modulo/remainder operator by @nirmie in #322
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #328
- Use dynamic values for AtomicOps by @panditsa in #269
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #331
- [WMMA] v_wmma_f32_16x16x16_f16 type support by @Megan0704-1 in #306
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #334
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #336
- Initial gfx1250 support by @Hardcode84 in #335
- wave dialect import by @ftynse in #313
- Distributed GEMM by @panditsa in #302
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #339
- Bump the github-actions group with 2 updates by @dependabot[bot] in #327
- Bump IREE requirement pins to their latest versions. by @iree-pr-automator[bot] in #343
- Fix gather_to_shared for vanilla and bshd attention kernels by @ashay in #332
- Wave dialect emission smoketest by @martin-luecke in #273
- [debugging] emit debug attrs for kernel by @willghatch in #340
- Add option to generate bounds check by @Hardcode84 in #344
- More code cleanup by @Hardcode84 in #282
- Fix test to generate full compiled graph w/o allocate by @tyb0807 in #349
- Fix mlir_converter lit test by @tyb0807 in #353
- Run external MLIR module through Wave by @tyb0807 in #308
- Remove double pickling of node fields by @martin-luecke in #357
- implement TopkOp by @willghatch in #277
- Fix mma verifier by @martin-luecke in #360
- parameterize topk e2e test for rdna4 by @willghatch in #361
New Contributors
- @lamikr made their first contribution in #271
- @saladpalad made their first contribution in #283
- @Megan0704-1 made their first contribution in #295
- @nirmie made their first contribution in #322
Full Changelog: v3.7.0...v3.8.0