From SIMD Wrappers to SIMD Ranges (pt 2).

Joel Falcou, Denis Yaroshevskiy

This talk (pt2)

Big Unsolved Issues

Dynamic register sizes

Compiling multiple versions

  • dlls (tutorial)
  • one binary
  • ODR / modules
  • Can the standard help?

Customization

Tuning algorithms

  • Usecases can differ
  • Experiments
  • unrolling/aligning/cardinal
  • sparse/dense

Using Intrinsics

Using Intrinsics

Domain restrictions

Tail Handling

Another case for garbage

Another case for garbage

Another case for garbage

Unaligned access

Is this a problem?

  • Data is in L1
  • Operation is very cheap
  • Peter Corders
  • align when it's cheap

Library support?

  • eve::aligned_ptr / aligned iterators
  • "aligned load is safe" trick
  • Is the input range aligned?
  • legacy instructions
  • simd_flag_aligned

Thanks

  • Peter Cordes
  • Ilya Albrecht
  • Mohamed Mediouni
  • Geoff Langdale

SIMD Ranges

What are we talking about?

  • NOT range<simd>
  • algo::range ~ ranges::range
  • iterator is a position

contiguous_range?

  • Positions outside
  • previous_aligned/next_aligned
  • base + offset

is everything random access?

  • scan (partial sum)

eve iterator model

  • value_type
  • types_to_consider
  • operator + / - / <=>
  • read / write / load / store
  • ---------------------------
  • iterator_cardinal / cardinal_cast
  • *partially_aligned* / unalign

views

  • convert
  • zip
  • map*
  • iota
  • reverse/backward

no filter view

  • compress store
  • transform_copy_if

map view

  • [](wide<int, N>){}
  • value_type
  • what's N?
  • Luke D'alessandro: projections

More small things

Sharing iteration logic

  • iteration(options, range, delegate)
  • for_each_iteration
  • for_each_iteration_fixed_overflow
  • for_each_iteration_with_expensive_optional_part
  • two_stage_iteration

Performance portability

  • compress/masked store/table lookup
  • don't expose
  • don't care
  • query

Controversies

Why not std::array?

  • std::array is great
  • intent
  • sizeof(4 shorts)
  • dynamic sizes
  • element access
  • ABI

Regularity

Regularity

  • it could work
  • std::array is great
  • simd and scalar code to look the same
  • all(==) - mostly tests
  • regular operator< - ?
  • garbage
  • dynamic size
  • no problematic usecase

Thanks

  • Co-authors of eve
  • Matthias Kretz
  • std::datapar contributors
  • People sharing their research

Links