Fancier: a unified framework for Java, C, and OpenCL integration
Fecha
2021Resumen
Graphics Processing Units (GPUs) have evolved from very specialized designs geared towards
computer graphics to accommodate general-purpose highly-parallel workloads. Harnessing the performance
that these accelerators provide requires the use of specialized native programming interfaces, such as CUDA
or OpenCL, or higher-level programming models like OpenMP or OpenACC. However, on managed programming languages, offloading execution into GPUs is much harder and error-prone, mainly due to the need
to call through a native API (Application Programming Interface), and because of mismatches between value
and reference semantics. The Fancier framework provides a unified interface to Java, C/C++, and OpenCL
C compute kernels, together with facilities to smooth the transitions between these programming languages.
This combination of features makes GPU acceleration on Java much more approachable. In addition, Fancier
Java code can be directly translated into equivalent C/C++ or OpenCL C code easily, which simplifies
the implementation of higher-level abstractions targeting GPU or parallel execution on Java. Furthermore,
it reduces the programming effort without adding significant overhead on top of the necessary OpenCL and
Java Native Interface (JNI) API calls. We validate our approach on several image processing workloads
running on different Android devices.