All you need is Superword-Level Parallelism: Systematic Control-Flow Vectorization with SLP
summary
This work generalizes SLP vectorization to pack independent, isomorphic instructions across different control-flow regions by converting code to predicated SSA that tracks predicates per instruction, adding active flags and mu nodes to preserve loop-liveness, fusing loops, rewriting predicates, and emitting masked vector ops. Implementation vectorizes 6 of 7 hard LLVM benchmarks (vs LLVM's loop+SLP) and reports on-average >80% speedup; it matches ISPC on some cases like the volume renderer.
AI-written summary · about
chapters (11)
- 0:00Intro
- 0:16Background: Loop Vectorization
- 0:38Background: SLP Vectorization
- 1:27Motivation: Exploiting ILP among different loops
- 3:33Idea: an IR that makes code motion trivial
- 4:55Predicated SSA
- 7:20Scheduling: Rewriting Predicates
- 8:37Scheduling: Guard Live-Out Values
- 10:38Vector Code Generation
- 12:00Vectorizing ISPC's serial baseline
- 13:32Conclusion and Future Work
related talks
21mgoSLP - Globally Optimized Superword Level Parallelism Framework
01h 01mIntroduction to Vector Parallelism
20mVectorizing Sparse Coiteration for Two-finger Loop Structure (Extended Abstract)
19mGetting the Most out of the LLVM Auto Vectorizer for RISC-V Vectors (RVV)
33mImproving the Effectiveness and Generality of GCC Auto-Vectorization
43mAuto-Vectorization in HotSpot
15mPushing the Packed SIMD Extension Over the Line: An Update on the Progress of Key RISC...
19mAggregation Optimization for SIMD Everywhere from ARM Neon to RISC-V Vector and Crypto Extensions
