Java bindings for CUDA

This site contains Java bindings for NVIDIA® CUDA™ and related libraries.

To use these libraries, you need a CUDA-enabled GPU device and the NVIDIA driver with CUDA support and the CUDA Toolkit from the NVIDIA website.

The APIs of the libraries on this site have been kept close to the original APIs. The functions of all libraries are provided as static methods, and semantics and signatures of these methods have been kept consistent with the original library functions, except for the language-specific limitations of Java. See the section about the pointer handling for more information.

A forum for questions and discussion about JCuda can be found at https://forum.byte-welt.net/c/byte-welt-projekte-projects/jcuda. Feel free to post your questions and discuss all aspects of JCuda there. Apart from that, any feedback that helps to improve JCuda is welcome.

The current list of Maven dependencies can be found in the downloads section.


2022-05-06: Version 11.6.1 has been uploaded to Maven Central.
2022-03-10: Version 11.5.2 has been uploaded to Maven Central.
2021-08-11: Version 11.4.0 has been uploaded to Maven Central.
2021-04-20: Version 11.2.0 has been uploaded to Maven Central.
2020-12-09: Version 11.1.1 has been uploaded to Maven Central
2020-09-21: Version 11.0.0 has been uploaded to Maven Central
2020-02-09: Version 10.2.0 has been uploaded to Maven Central
2019-05-30: Version 10.1.0 has been uploaded to Maven Central
2018-11-17: Version 10.0.0 has been uploaded to Maven Central
2018-06-24: Version 0.9.2 has been uploaded to Maven Central
2018-04-06: Version 0.9.0d has been uploaded to Maven Central
2017-02-27: Version 0.8.0 has been uploaded to Maven Central

2016-11-10: Version 0.8.0

2016-09-23: The samples are moving to GitHub

2016-09-15: Version 0.8.0RC

2016-02-22: Version 0.7.5b

2015-09-23: First version of JCudnn

2015-09-17: Version 0.7.5

2015-07-06: Update of JCudpp

2015-05-21: Extended documentation

2015-05-11: Update to version 0.7.0a

(Older entries omitted here)


The following libraries are currently available:

JCuda Java bindings for the CUDA runtime and driver API.

This is the base for all other libraries on this site. It allows interacting with a CUDA device, by providing methods for device- and event management, allocating memory on the device and copying memory between the device and the host system. Additionally, the library comprises bindings for the CUDA driver API, which allows loading and executing PTX- and CUBIN files and launching CUDA kernels from Java.
The following are special-purpose libraries which are using JCuda as a common platform:

JCublas Java bindings for CUBLAS, the NVIDIA CUDA BLAS library.

This library makes it possible to use CUBLAS, the NVIDIA CUDA implementation of the Basic Linear Algebra Subprograms, in Java applications.
JCufft Java bindings for the NVIDIA CUDA FFT library.

This library provides methods for using CUFFT, the NVIDIA CUDA implementation of Fast Fourier Transforms in Java applications.
JCudpp Java bindings for CUDPP, the CUDA Data Parallel Primitives Library.

This library enables Java applications to use the CUDA Data Parallel Primitives Library, which contains methods for sparse-matrix-vector-multiplications, parallel scans and sorting.
JCurand Java bindings for CURAND, the NVIDIA CUDA random number generator.

JCurand offers GPU-accelerated random number generation for Java, using the CURAND random number generator.
JCusparse Java bindings for CUSPARSE, the NVIDIA CUDA sparse matrix library.

With JCusparse it is possible to use the sparse matrix level 1,2 and 3 BLAS functions and sparse matrix conversion routines provided by CUSPARSE.
JCusolver Java bindings for CUSOLVER, the NVIDIA CUDA solver library.

JCusolver is a Java library for the CUDA solver library for dense- and sparse solvers and reoptimization.
JCudnn Java bindings for cuDNN, the NVIDIA CUDA deep neural network library