In my experience there is no single SIMD library that wraps all possible set of vector instructions across the most common architectures and at the same time provides support for all popular compilers while supporting C and C++11/14. (I mention C because there is an issue for Arrow support in C, https://issues.apache.org/jira/browse/ARROW-1851). I even at one point wanted to solve this problem via a multi-layer library but found that it would require more time and access to a variety of computing resources, see (or not) https://github.com/edponce/libsimdcpp. The main reason is that SIMD libraries are commonly created on a as-needed basis and thus, provide a project-specific subset of vector ISAs.
In terms of performance, most libraries (or better said, most common vector instructions) are wrapped very similarly (many times, identically), so performance should be comparable across SIMD libraries (assuming same compiler/architecture). Given that SIMD functions have very simple bodies, they are usually inlined during compilation. SIMD libraries tend to be header-only. I suggest to care about performance on specific SIMD operations of interest that will be placed in hotspots. Examples of operations that tend to differ in implementation between SIMD libraries are reductions, operands of different type/size, arithmetic shortcuts in modulus/division, conditional masks, and custom ones. Aspects that I consider important for selecting a SIMD library are: 1) Coverage of vector ISA, architectures supported, and compilers supported a) These requirements are project-dependent 2) Library APIs: Does it support function-based paradigm? Object-oriented? Operator overloading for common arithmetic/logical operators? What conditional predicates does it support? 3) Modularity and how is easy it is to extend? 4) Maintainer's support I personally do not have a "favorite" candidate, but did browsed xsimd and agree that we can fill/improve the gaps needed for Arrow. ~Eduardo