hi all, > "nova-simd" is a C++ header-only template library for taking advantage > of SIMD instructions in the kind of DSP processes used in audio > processing (i.e. not just basic stuff like vectorised mul+add and loop > unrolling, but also some more audio-specific things like ramps, > distortions, etc).
few comments: the idea of nova.simd is to provide a templated vec<> class, which represents a short vector (aka simd register) and that is a building block for algorithms ... independent from the hardware: the idea is to be able to write the same code but target altivec, sse, avx, neon or any other possible simd instruction set. on top of this, there are algorithms, like some vectorized libm algorithms, but also some horizontal ones like summing of squares or finding the (absolute) peak of a signal. the algorithm part of the library makes use of expression templates, to formulate linear ramps (instead of a scalar or a vector as argument, one can specify a scalar and a slope). regarding numbers, it is somewhat hard to say and it *really* depends on the use case, the instruction set and to some degree on the CPU. e.g. for sse vec<float> will contain 4 elements, for avx 8 elements ... iac, nova.simd expects a reasonably well optimizing compiler, as it highly depends on inlining tiny functions. handwritten assembly code may still be faster, but lacks the abstraction (especially the portability) ... regarding arm/neon, i have no idea how it performs, as i've been using a CPU emulator to develop the library. cheers, tim -- dupswapdrop -- the music-dsp mailing list and website: subscription info, FAQ, source code archive, list archive, book reviews, dsp links http://music.columbia.edu/cmc/music-dsp http://music.columbia.edu/mailman/listinfo/music-dsp
