29
votes

Is it possible to do GPU programming in Java ? I mean without using native libraries.

And how much of a performance improvement can one expect when we switch over to gpu's ?

Edit:

I am not looking at game programming, I want to do hard core number crunching.

4
Do you mean write the shader program in Java? Or use Java to load a shader written in a shader language (GLSL or HLSL) onto the GPU and run it? AFAICT, there aren't any Java -> GPU bytecode compilers (or converters from Java bytecode to GPU bytecode), so you can't write your GPU program in Java. - Ben Voigt
Hey guys, you have thrown up quite a few key words which I am unaware of !! Like I did not know what a shading language was, but found out after a quick google search. Ok based on your replies I am going to make an edit - Anand Sunderraman

4 Answers

12
votes

Yes. Java3D, LWJGL and JOGL support GLSL (OpenGL Shading Language).

Edit:
You can use OpenCL if you want to do platform-neutral, general-purpose computation on GPUs. This framework lets you write code that treats all processing units identically, despite wildly varying feature sets and execution environments. Though, this is very low level programming compared with Java.

It seems your ideal would be a JVM written with OpenCL support. Searching online, I found a little bit of interest in the idea but no evidence of any major backing.

how much of a performance improvement can one expect

That depends on the system you're running on and what sort of data you're processing (Matrix and vector math is extremely efficient on GPUs). You'd likely get some major gains on a system like mine with two powerful GPUs and a modest single-core CPU. However on a computer with a modest GPU and a quad-core CPU, the performance gains might have a hard time overcoming the overhead.

6
votes

Rootbeer1 has just been released on github: https://github.com/pcpratts/rootbeer1

With Rootbeer you can program using almost any Java except the following:

  1. native methods and fields
  2. reflection
  3. dynamic method invocation
  4. garbage collection
  5. sleeping inside a monitor

This means you can use arbitrary object graphs with composite types.

2
votes

If you are still considering hard core number crunching in Java on GPU without using native libraries, you might be interested by this blog article http://ateji.blogspot.com/2011/02/java-on-gpu-with-ateji-px.html We (I am part of the Ateji team) have seen performance of up to 60x so far on Java applications that can be massively parallelized.

1
votes

def check out rootbeer1, but you need to make sure you have a CUDA accepted GFX card first before you start on it and have done all of the NVIDIA setup etc

download Link: google CUDA download

getting started guide http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Getting_Started_Windows.pdf