Syllabus
- Implementing reduction: an overview
- Reduction: the general case
- Finding the identity element
- Nested identities using array traversal
- Detecting trivial and special cases
- Asymptotics and the classification of short arrays
- The optarith strategy: select, coerce, apply
- Handling associative operations with virtual rows
- Vector register reductions with SSE, NEON, and POWER
- Vectorised stride-1 reduction: minimum and maximum
- Vectorised stride-1 reduction: dealing with overflow
- Tack-reduction using indexing
- The join idioms
,/
and ⍪/
- Common pitfalls with complex numbers and decfs
- Booleans
- Boolean function taxonomy
- Shortcutting vector boolean reductions
∧
∨
⍲
⍱
<
>
≤
≥
- Vector searching and the problem of boundaries
- Short-row reductions with bit uninterleaving
- Bit uninterleaving without BMI2
+/
and -/
: popcount and popcount emulation
=/
and ≠/
: medium and long rows with popcount
- Associative SWAR scanning, and
≠/
from ≠\
- Carry-less multiply and
≠/
- Short-row strategies for
∧/
∨/
+/
-/
- Strided boolean reductions: dealing with offsets
+⌿
and -⌿
with vector processing utilities
∧⌿
and ∨⌿
: Word-level shortcuts
- Optional lecture: comparison reductions on integers
- Future optimisations
- Cache-aware ordering for vectorised strided reduction
- Vectorised short-row reductions
- Vectorised reductions on length-2 rows
- Reducing multiple rows with in-register transpose
- A faster popcount with AVX2 shuffle
- Detecting associativity and side effects
- JIT-compiling arithmetic reductions
- Enabling tail calls by merging with
⊃
- Common sum and product formulae
- Reductions of structural thunks
- Advanced identity solving