jcuda.org
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 discussion about JCuda can be found at
http://forum.byte-welt.de/forumdisplay.php?f=87&langid=2. Feel free
to post your questions and discuss all aspects of JCuda there. Apart from that, any
feedback that helps to improve the APIs and the
functionalities of the libraries is welcome.
News
2013-03-20: Minor update to JCuda 0.5.0a
-
Some bugs have been fixed. See the
change log for details.
2013-01-17: Update of JNpp - now supporting signal processing functions
-
A new beta version of JNpp is now available in the
Downloads section.
This version is intended for CUDA 5.0.35. In addition to the
NPP image processing functions that are offerend via the JNppi
class, this version now also supports the NPP signal processing
functions via the JNpps class.
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)
-
This version is intended for CUDA 5.0 (final), build 35.
The source code, documentation and binaries are available in the
downloads section.
If you would like to contribute by providing binaries for a
system configuration that is not available yet, please
contact me.
Important notes:
-
Not all functionalities could be tested, specifically those
that require a compute capability >=2 or a Linux OS.
-
The functions for setting stream callbacks are not yet supported
and will throw an
UnsupportedOperationException.
They will probably be supported in a future version.
2012-10-11: Update to JCuda 0.5.0 RC
-
This version is intended for CUDA 5.0 (Release Candidate), build 27.
The source code, documentation and binaries are available in the
downloads section.
If you would like to contribute by providing binaries for a
system configuration that is not available yet, please
contact me.
Important notes:
-
Not all functionalities could be tested, specifically those
that require a compute capability >=2 or a Linux OS.
-
The functions for setting stream callbacks are not yet supported
and will throw an
UnsupportedOperationException.
They will probably be supported in a future version.
-
Functions of the runtime API that allowed identifying symbols
via their name (as a String) have been removed completely
in CUDA 5.0. In JCuda, they will now throw an will throw an
UnsupportedOperationException. But since these
functions could not sensibly be used in Java at all, this should
not affect existing programs.
-
Starting with CUDA 5.0, the JCuda, JCublas, JCufft, JCurand and
JCusparse libraries will be considered as the 'core' libraries.
The bindings to third party libraries (like JCudpp for CUDPP)
and beta versions of the CUDA toolkit libaries (like JNpp for NPP)
will be offered separately.
-
Some bugs have been fixed. See the
change log for details.
2012-08-08: Preconditioned CG solver sample
-
A sample for the implementation of CG solvers for sparse matrices
using JCusparse and JCublas has been uploaded:
CG Solver sample
2012-07-12: Update to JCuda 0.4.2
-
This version is intended for CUDA 4.2, build 9. Not all functionalities
could be tested extensively, specifically those that require a
compute capability >=2 or a Linux OS. Also, the new functions
for setting shared memory configurations that have been introduced
in CUDA 4.2 are not available in the driver API.
-
The source code, documentation and binaries are available in the
downloads section.
If you would like to contribute by providing binaries for a
system configuration that is not available yet, please
contact me.
-
The
Pointer#to(Buffer) method does not take into
account the position and array offset of buffers. While the
method is kept for backward compatibility, a new method,
Pointer#toBuffer(Buffer) has been introduced,
which takes the position into account. A sample demonstrating
the difference between both methods has been uploaded:
Pointer to buffer sample
2012-04-12: Early beta of JNpp uploaded
-
An early beta version of JNpp is available in the
Downloads section.
JNpp offers Java bindings for the NVIDIA Performance Primitives library,
which contains thousands of functions for efficient image processing.
See the JNpp page for details.
2012-03: Bug report
2012-02-08: Update to JCuda 0.4.1
-
This version is intended for CUDA 4.1, build 28. Not all functionalities
could be tested extensively, specifically those that require a
compute capability >=2 or a Linux OS.
-
The source code, documentation and binaries are available in the
downloads section.
If you would like to contribute by providing binaries for a
system configuration that is not available yet, please
contact me.
(
Change log)
Libraries
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.
|
|