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 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.
News
2017-02-27: Version 0.8.0 has been uploaded to Maven Central
-
JCuda has been made available in Maven Central. The list of
dependencies can be found in the downloads
section.
2016-11-10: Version 0.8.0
-
JCuda has been updated for CUDA 8.0.44 (final). The binaries are
available in the downloads
section.
2016-09-23: The samples are moving to GitHub
2016-09-15: Version 0.8.0RC
-
JCuda and JCudnn have been updated to support CUDA 8.0.27 (Release Candidate)
and cuDNN 5.1
-
The binaries are available in the downloads
section. Note that this is the first release where the native binaries
(DLL, SO and DYLIB files) are no longer distributed directly. Instead, they
are contained in JAR files and loaded from these JARs. This is one step
of
improving the deployment of the native libraries, with the goal of
bringing JCuda into Maven Central.
2016-02-22: Version 0.7.5b
-
A bugfix update: The method signatures for some of the JCusolver
methods have been fixed to receive an int array instead of a pointer.
2015-09-23: First version of JCudnn
-
JCudnn been added to the set of JCuda libraries. It offers
Java bindings for cuDNN,
the NVIDIA CUDA Deep Neural Network library. The binaries are
available in the downloads
section. The source code will be hosted at
https://github.com/jcuda/jcudnn
2015-09-17: Version 0.7.5
-
JCuda has been updated to support CUDA 7.5
-
The source code of JCuda is migrated to
https://github.com/jcuda.
Currently, the source code of the core JCuda libraries
(JCuda, JCublas, JCufft, JCurand and JCusolver) is already
available at GitHub. The other libraries will be added successively.
See the jcuda-main project at GitHub
for further information and build instructions.
2015-07-06: Update of JCudpp
-
JCudpp has been updated to support for CUDPP 2.2.
The source code, documentation and binaries (currently, only for Windows 64bit)
are available in the downloads
section.
2015-05-21: Extended documentation
-
The Documentation
section has been restructured and extended with a section about
Debugging JCuda applications
2015-05-11: Update to version 0.7.0a
-
Some methods had been missing in the JCublas2- and JCusparse
libraries. This has been fixed in the new version
-
A first basic support of Unified Memory has been added,
but should be considered as experimental.
-
The build scripts have been updated to use a more
recent
FindCUDA.cmake
version, and
to properly support the compilation of JCusolver
-
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.
2015-04-10: Update for CUDA 7.0
-
JCuda has been updated to support CUDA 7.0
-
NOTE: Starting with CUDA 7.0, the CUDA toolkit does no
longer support developing on 32bit Windows- or Linux platforms.
See the
CUDA Toolkit Release Notes for details. Accordingly,
the JCuda binaries will from now on only be offered
as 64bit versions.
-
The JCusolver library has been added, to support the
CUSOLVER library that was introduced with CUDA 7.0
-
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.
2015-02-26: JCuda in emulation mode with gpuocelot
2015-01-22: Update of Windows binaries
-
The Windows binaries (for 32 and 64 bit) had a dependency to
redistributable Microsoft DLLs. This could cause an
UnsatisfiedLinkError
on some target systems.
This dependency has been removed, and the updated binaries
are available in the downloads
section.
2014-08-26: Update for CUDA 6.5
-
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.
2014-07-03: About ansychronous operations
2014-05-20: Update to JCuda 0.6.0
-
No changes in the API compared to the release candidate
-
As of CUDA 6.0, the APIs of CUSPARSE and CUSPARSEv2
have been merged. The new functionality of CUSPARSE
is now available via the
JCusparse
class.
The JCusparse2
class is omitted.
-
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.
-
Notes:
-
The JCudpp and JNpp libraries have not been updated for a while.
-
Java bindings for the new "Xt" libraries (CUFFT Xt and CUBLAS Xt)
are not yet available
2014-04-18: Update to JCuda 0.6.0
RC
-
This is an intermediate release for the CUDA 6.0.26 Release Candidate.
-
Note: This version was finished nearly at the same time as the
production release of CUDA 6.0, and thus, could not be
tested extensively (particularly because the release
candidate installers are no longer available at the
NVIDIA CUDA downloads page). Unless you already have installed
the CUDA 6.0 RC (Release Candidate) toolkit and want to compile
the corresponding native libraries on your own, it is
recommended to wait until JCuda is updated for the
CUDA 6.0 final production release.
-
As of CUDA 6.0, the APIs of CUSPARSE and CUSPARSEv2
have been merged. The new functionality of CUSPARSE
is now available via the
JCusparse
class.
The JCusparse2
class is omitted.
-
The source code, documentation and the 32bit Windows binaries
for this intermediate release 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.
-
Further notes:
-
The JCudpp and JNpp libraries have not been updated for a while.
-
Java bindings for the new "Xt" libraries (CUFFT Xt and CUBLAS Xt)
are not yet available
-
These libraries will be updated/added as soon as possible,
either together with the release of JCuda 0.6.0, or shortly
after this release.
2014-03-14: Maven version of JCuda
2013-09-13: Update to JCuda 0.5.5
-
This version is intended for CUDA 5.5. 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 bug related to the kernel parameters was not fixed
properly in the previous version. It should be fixed
now, and the test coverage for kernel parameter handling
has been increased.
-
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.
2013-06-04: JCuda Vector utilites
-
A library for general vector operations has been added to the
Utilities section. It allows
simple arithmetic, comparison and math functions to be applied
to vectors of single- or double-precision floating point values,
thus reducing the necessity to implement own CUDA kernels for
simple vector operations.
2013-06-02: Update to JCuda 0.5.0b
-
A bug has been fixed: When using the same 'kernel parameters'
pointer object for multiple calls to
cuLaunchKernel
, then
the subsequent launches could cause a CUDA_ERROR_UNKNOWN
.
This issue has been resolved in version 0.5.0b. Updated binaries for
Windows 32bit are available in the
downloads section. Other binaries
will follow soon.
A simple workaround to avoid this bug in earlier versions is to create
the kernel parameters pointer for each call to cuLaunchKernel
.
So instead of using the same pointer multiple times
Pointer kernelParameters = Pointer.to(...);
for (int i=0; i<n; i++)
{
// DON'T DO THIS!
cuLaunchKernel(...,kernelParameters,...);
}
|
you should set up the kernel parameters for each call:
for (int i=0; i<n; i++)
{
Pointer kernelParameters = Pointer.to(...);
cuLaunchKernel(...,kernelParameters,...);
}
|
-
Some functions that had not been available in earlier CUDA versions have been added.
See the change log for details.
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.
|
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.
|
|