Java is still at the early stages of supporting SIMD instructions. The only documentation claiming Java supports SIMD instructions is in bug reports, and in practice the Hotspot JIT compiler never vectorized anything beyond a simple test program with a single sequential loop containing an array addition. Anytime threads were involved or the loop became more complicated the Hotspot JIT compiled to non SIMD instructions. Because of this, a special vector library is needed in order to enable SIMD operations in Java. Below you will find a link to a C++ vector library accessible to Java through JNI function calls as well as 10 Aparapi benchmarks comparing the performance of running Aparapi Java in the Java thread pool, with the vector library implemented, in a reduced looped kernel implementation, as well as on the GPU. README files with instructions on how to compile and run the benchmarks are included as well.
For more information see Curt's masters thesis.
- Auto-vectorizer (to appear)
- Pre-vectorized Aparapi test cases