<div dir="ltr">Hi all,<div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>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.<br><br>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 <a href="https://github.com/xtensor-stack/xtensor">xtensor</a>. 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.</div></div>