[eigen] New(?) way to make using SIMD easier |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
Just an idea:
What if the user could write code like:
VectorOperator( std::plus<SomeDataType>() , dstPtr , srcPtr1,
srcPtr2 , num );
which would use a SIMD-optimized call if one exists, and use a generic
algorithm otherwise.
Examples:
1. a functor std::plus<float> and float pointers: there could be a
specialization that uses _mm_add_ps (on x86) to add 4 floats at a time
2. a functor std::multiplies<double> and double pointers: the
specialization would be to use _mm_mul_pd to add 2 doubles at a time
It might even be used to detect special conditions. e.g. If CUDA
processing is enabled and the source pointers are device memory It
performs all calculations on the device. Then brings the result back to
the host only if the destination resides in host memory.
Does this offer any advantages in development speed/clarity or in
flexibility over Eigen's current method of using SIMD? I admit I am
fairly ignorant of the current state of Eigen SIMD.