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.


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

2015-04-10: Update for CUDA 7.0

2015-02-26: JCuda in emulation mode with gpuocelot

2015-01-22: Update of Windows binaries

2014-08-26: Update for CUDA 6.5

2014-07-03: About ansychronous operations
2014-05-20: Update to JCuda 0.6.0
2014-04-18: Update to JCuda 0.6.0RC
2014-03-14: Maven version of JCuda
2013-09-13: Update to JCuda 0.5.5
2013-06-04: JCuda Vector utilites
2013-06-02: Update to JCuda 0.5.0b
2013-03-20: Minor update to JCuda 0.5.0a
2013-01-17: Update of JNpp - now supporting signal processing functions
2012-12-18: Article: Introduction to JCuda
2012-12-18: Introduction about JCuda in NVIDIA Nsight
2012-11-15: Update to JCuda 0.5.0 (final)
2012-10-11: Update to JCuda 0.5.0 RC
2012-08-08: Preconditioned CG solver sample
2012-07-12: Update to JCuda 0.4.2
2012-04-12: Early beta of JNpp uploaded
2012-03: Bug report
2012-02-08: Update to JCuda 0.4.1

(Change log)


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.