Code vectorization in JVM
Modern CPUs have a rich set of instructions for parallel data processing called vector (or SIMD) extensions. Numerous flavors of SSE & AVX on x86, VIS on SPARC, NEON on ARM, AltiVec on Power, which differ in many aspects. Such variance makes it notoriously hard to utilize all available computational power in cross-platform manner. Java is one of the most popular programming languages in today’s software development and it is well-known as a first class cross-platform computing environment. State-of-the-art JVMs (e.g., HotSpot) do a good job at automatically detecting implicit parallelism and generating vectorized code for Java programs, but it is limited. There are use cases when a specialized API is needed and they were overlooked until recently. As part of Project Panama, different ways to bring the benefits of vector/parallel computation capability into Java platform are explored. One of them is library-based Java API (called Vector API) which efficiently maps to hardware and aids developers to explicitly expose the programs’ data parallelism. The talk covers existing mechanisms for vector programming available in Java platform and future enhancements which are developed in Project Panama & other OpenJDK projects.