JOCL provides java bindings to OpenCL, the open computing language.
JOCL enables applications running on the JVM to use OpenCL for massively parallel, high performance computing tasks, executed on heterogeneous hardware (GPUs, CPUs, FPGAs etc) in a platform independent manner. JOCL consists of two parts, the low level and the high level binding.
Low level Bindings
The low level bindings (LLB) are generated from the Khronos OpenCL headers and provide a high performance, JNI based, 1:1 mapping to the C functions.
This has the following advantages:
- reduces maintenance overhead and ensures spec conformance
- compiletime JNI bindings are the fastest way to access native libs from the JVM
- makes translating OpenCL C code into Java + JOCL very easy (e.g. from books or tutorials)
- flexibility and stability: OpenCL libs are loaded dynamically and accessed via function pointers
High level Bindings
The hand written high level bindings (HLB) is build on top of LLB and hides most boilerplate code (like object IDs, pointers and resource management) behind easy to use java objects. HLB use direct NIO buffers internally for fast memory transfers between the JVM and the OpenCL implementation and is very GC friendly. Most of the API is designed for method chaining but of course you don't have to use it this way if you don't want to. JOCL also seamlessly integrates with JOGL 2 (both are built and tested together). Just pass the JOGL context as parameter to the JOCL context factory and you will receive a shared context. If you already know OpenCL and Java, HLB should be very intuitive for you.