I've stumbled across IPP on my travels through the web and it looks interesting, however perhaps a little too specialist for my needs. I wonder if you guys can help me?
I'm working on a piece of simulation software for Ion Optics (particle trajectory) and ion interactions (basically an NBody simulation). The current software is single threaded, and written in .NET :O
There was an attempt at a parallel version using .NET4.0 (Parallel extensions, basically a parallel for loop with multi affinitized threads) however I am not convinced it is the best approach. I wish to utilise multi-cores (so the algorithms can be made parallel) but also SIMD instructions on CPUs to get the full benefit of each core.
So basically I'm looking for an SIMD library in C/C++ that I can integrate to my application. It must support double precision, must compile with MSVC++ and on x86 or x64. Minimum target CPU is a P4 so I'm looking at SSE versions 2/3 or later, however ideally the library must be able to hardware detect and swap out the implementation if sub-standard hardware is detected.
I don't require any high level functions such as the image/video processing functions in IPP but things like matrix (4x4, 3x3) / vector (2, 3, 4) operations or dot product would be useful.
We are looking at making certain core parts of the algorithm execute in parallel. The front-end application requires a lot of flexibility so we can't just write a C program and be done with it. Ideally I would like to place accelerated implementation of the algorithms in a C++ library to be called from the main .NET app (likely via C++/CLI interop). In the future I would also like to give consideration to shifting the algorithm to either a cluster or GPU powered workstation, so OpenCL, MPI and/or CUDA may be future technologies employed.
Any suggestions/comments on the Intel range of products?
Many thanks for your time,
Based on what you've described I think you definetely should be interested in taking a deep view to IPP product and specifically to ippm and ippvm libraries (which stands for small matrix and vector math operations). I also will let our technical consultiing engineers know about your request, so they may want to contact you directly.
Sounds great, thanks for your reply!
Another question is - in addition to the ippvm, ippm libraries does IPP supply some standard primitives for executing 4-component float or 2-component double operations? The usual suspects are used time and time again in our app:
- Add/Sub/Multiply, divide, Square Root, Exponent etc...
I took a look at the Intel Intrinsics but I'm not too clear on how I could use these for my needs.
What do you mean under 4-components float (or 2-components double) operatrions? IPP does contains the base arithmetic (and more advanced transcedent) operations for 1D vector data types, 2D images and small matrixes.
May be Intel MKL will be helpful for you. It contains highly optimised versions of BLAS and LAPACK libraries and much more. Here is a Reference Manual for this library. MKL can be downloaded from Intel Registration Center. Also you can ask any question regarding this library on Intel MKL Forum.