[PROJ] Vector/SIMD acceleration

johan mabille johan.mabille at gmail.com
Sun Apr 19 14:47:56 PDT 2020


Hi all,

Joris Van Den Bossche drew my attention on this thread as I co-authored
xsimd. I am not here to advertise my own library, but rather to give a bit
of context about xsimd.

When we started xsimd, we were aware of Eigen and its usage of SIMD
instructions. Our concern was that it was deeply buried into Eigen, while
we wanted to have a library dedicated to SIMD acceleration. Besides, at
this time, the intrinsics were wrapped into free function instead of
operators, making it harder to write generic code that would work with and
without intrinsics available. This would require writing the code twice.

Another good candidate was boost.simd. By the way, most of the advanced
mathematical functions come from there. The issue was its dependency on
boost, while we wanted a C++14 lightweight library.

Regarding the limitation of instantiating a vector that doesn't map to a
single SIMD register, this is basically due to the nature of xsimd: it is
supposed to simply wrap SIMD registers and intrinsics. For more advanced
features, like instantiating a vector with more elements than in a single
SIMD register, as it can be done in Eigen for instance, we provide xtensor
<https://github.com/xtensor-stack/xtensor>. Therefore, xsimd is supposed to
be at the register level, while xtensor is at the container level. However,
we see more an more interest in having the possibility to instantiate
vectors that map to more than one register withouth requiring to pull
another complex library with totally unrelated features. So we are
considering implementing this feature as well in xsimd.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/proj/attachments/20200419/332fb7bf/attachment.html>


More information about the PROJ mailing list