
Would it be possible to design Boost.SIMD so that it allows switching between different implementations/backends. For example OS X already provides the Accelerate framework so I might want to/need to use that, or I might want/need to use Intel's MKL or AMD's ACML-MV or Framewave...?
I'm looking for a library to replace Framewave (which seems to be dead for almost two years and might perhaps be useful for scavenging), for relatively simple 1D vector operations (multiplication, addition, trigonometric functions, log, exp...), if NT2 already supports those (SSE1 and optionally SSE2 versions) it would be a great place to start with/as an intermediate solution while waiting for Boost.SIMD...(?)
Boost.SIMD does not have first-class support for 1D vectors. It only works with SIMD registers. It's up to you to allocate your memory (which you can do using the SIMD allocator), load/store SIMD registers from/to it (which you can do using the SIMD iterator adaptor), run or parallelize loops, etc.
i think this is very important, since most frameworks only provide vector functions, but are not composable.
As for MKL, it provides fast implementations of math functions. We are not certain yet whether those will be part of Boost.SIMD or not -- indeed, maybe Boost.SIMD should only contain 'trivial' arithmetic and bitwise functions. In any case, our implementations of the trigonometric and exponential math functions are faster and more accurate than those of MKL.
i would really appreciate if a boost.simd library would provide math functions! implementing them is not really straight-forward but gives a significant performance gain. they could be implemented in a way ontop of the `trivial' arithmetic interface, so the implementan could be reused among different backends. cheers, tim -- tim@klingt.org http://tim.klingt.org Linux is like a wigwam: no windows, no gates, apache inside, stable.