3 ms·
One option which I have not seen mentioned here yet is to use a platform independent API with a platform optimized implementation. i.e. if your operations can b
by microtherion 8y ago
One option which I have not seen mentioned here yet is to use a platform independent API with a platform optimized implementation. i.e. if your operations can be expressed in terms of BLAS primitives, then ATLAS can give you a good part of the benefit of hand optimized code, without much of the hassle: http://math-atlas.sourceforge.net http://math-atlas.sourceforge.net
- gnufx 8y agoYes, that's important for portable performance, but not with ATLAS. Unless it's improved since I last tried, it's generally slower than OpenBLAS (or BLIS, by extension) and doesn't do dynamic dispatch on the micro-architecture like OpenBLAS and BLIS -- currently on x86_64 and also aarch64 with OpenBLAS. (To deal with small matrices (on x86_64 only) you want libxsmm backed by OpenBLAS or BLIS.) From previous experience I'd guess BLIS' new generic C micro-kernel for GEMM will beat ATLAS with recent GCC vectorizing it. Note in the case of GEMM, the most important part of BLAS, vectorizing is only really relevant after you've restructured it.