In the past, I've used Visual Studio with the DirectX XNA math library. Now, I'm using the GNU compiler collection. Can anyone advise a SIMD math library with a good documentation?
You can also do it "yourself" using the SSE (Streaming SIMD Extensions) instructions and the intrinsics ( *mmintrin.h files ) of your compiler/proc.
Here is an example of how to use SSE instructions with assembly:
And here is a tutorial on how to use SSE instructions with intrinsics:
A practical guide to using SSE SIMD with C++:
Intel C++ Intrinsics reference (useful to get the list of instructions):
SSE & SSE2 Intrinsic support for the enhanced instruction sets supported by Intel and AMD processors (useful to all kinds of informations relative to SSE and SIMD):
Overall instructions list and informations about SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow etc (different versions of SSE for different proc architecture):
If you prefer a linear algebra framework I eared about Eigen:
http://eigen.tuxfamily.org/index.php?title=FAQ#Vectorization (about SIMD support)
And finally if you need more answers about C++ SIMD Frameworks, here is a StackOverflow link. (C++ SSE SIMD framework) :
by a little seraching i think you can use bullet's math library, bullet itself is an opensource physics engine and it seems to have a powerfull math library beside it. here is a shortcut to download link http://sourceforge.net/projects/bullet/files/SIMD%20and%20amp_%20Vector%20Math%20library/simd%20math%201.02%20and%20vector%20math%201.01/simdvectormath.tgz/download
It is not here yet. But there will be a boost.simd library (hopefully). Take look at this presentation (given last week at boostcon)
AMD has the open source SSEPlus project, although I have never used it so I can't comment on its quality or applicability.
While not exactly focused on using SIMD, I find glm to be a very good general-purpose math library when it comes to games. It doesn't support arbitrary matrices and the like, but it has streamlined features to be used with 3D graphics and it has features to enable SSE as well as some faster implementations of common algorithms.
While it is specifically designed to be used with OpenGL, I have found it to be very useful for a variety of tasks. It heavily uses operator overloading which makes it very easy to use and maintain the code that uses it.
It is based on the OpenGL GLSL language, which has very solid documentation, and any differences are well documented too.