Choosing the correct vectorization method
summary
Motion estimation uses block matching with the sum of absolute differences as the hot inner loop, implemented as triple nested loops. Benchmarks use GCC 4.9 and compare auto-vectorization, OpenMP 4.0 simd, ISPC/SilkPlus and low-level SSE/NEON intrinsics. Results show compiler auto-vectorizer gives modest gains, ISPC often beats it, and intrinsics deliver the biggest wins (up to roughly 8× on large blocks). Multi-core scaling is good to three cores and then saturates because threads share vector units.
AI-written summary · about
chapters (8)
- 0:00Introduction to research
- 0:33Use case: motion estimation
- 2:00Naive vs auto-vectorization
- 4:01OpenMP vectorization
- 5:11Cilk plus array notation
- 6:10Hardware-specific intrinsics
- 7:23Performance benchmarks
- 9:17Conclusion and Q&A
related talks
42mFaster programs with your compilers autovectorization feature
01h 00mVectorizing Computational Fluid Dynamics (CFD) Code in C++ Using std::simd
01h 08mAn implementer's view of Boost.SIMD
52mAdvanced SIMD Algorithms in Pictures
01h 05mThe Most Important Optimizations to Apply in Your C++ Programs
01h 06mSIMD in C++20: eve of a new era
01h 01mWant fast C++? Know your hardware!
32mOptimizing Away C++ Virtual Functions May Be Pointless
