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.

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.

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.

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.0RC

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.

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

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.

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.

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.

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.

Libraries

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: