Overview
Syllabus
Intro
Who this talk is for
Talk Contents
What is SIMD?
SIMD Analogy: Chopping Veggies
Why is SIMD important?
Dedicated Hardware: Skylake Example
Cache Bandwidth
The vector fallacy
Quick smell test for float SIMD-ness (x86)
Example: 3D dot products (back to basics)
Example: 3D dot products (SIMD)
SIMD mindset, contd.
So how do you get SIMD code?
LLVM's auto vectorizer
Example of successful vectorization
Explicit SIMD with Unity.Mathematics
Explicit Unity.Mathematics SIMD Example
The need for typeless SIMD
Data reinterpretation
Instruction selection
Leveraging data tricks
What we're working on
Typeless?
Do what the hardware does
API Usage Example
API Extract
A more complete example
Reference version
Reference disassembly
Let's lose the branches
Branch-free disassembly
Explicit SIMD with Unity Mathematics
Explicit Math version disassembly
Explicit SIMD with Burst Intrinsics
Explicit SIMD Disassembly
Guidelines for SIMD with Burst
What about System.Numerics?
Summary
Thank you!
Taught by
Unity