I'm doing some work where SIMD is required and I need to do operations on an array of doubles. Do any of the mainstream architectures support this? I've only seen floating point operations.
Thanks in Advance, Stefan
I'm doing some work where SIMD is required and I need to do operations on an array of doubles. Do any of the mainstream architectures support this? I've only seen floating point operations.
Thanks in Advance, Stefan
Yes, x86 can do it with the SSE2 instructions. A CELL too, although it's performance is pretty awful when doing double-precision computations.
ARM VFP can do doubles as well.
The new NEON SIMD extension (which is btw. the best SIMD instruction set that I've seen so far) can unfortunatley only deal with 32 bit floats.
CUDA running at compute capability 1.3 or grater can do it, too. The newer GTX 2xx cards can do this.
Here's the SEE2 intrinsics supported by the C++ compiler in VS2008.
As mentioned by jalf the CELL processors double precision support for SIMD takes a significant performance hit (I believe later iterations of the chip not used in the PS3 have much improved behaviour).
In terms of main stream SSE2 came in the pentium 4 in 2001 so is widespread in the x86 industry. according to the steam hardware survey 95% of that population has SSE2 so i think it's safe to target it.