29

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.

Anand Sunderraman
  • 7,900
  • 31
  • 90
  • 150
  • 1
    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 Aug 02 '10 at 04:43
  • 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 Aug 02 '10 at 07:22

4 Answers4

12

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.

Display Name
  • 8,022
  • 3
  • 31
  • 66
Gunslinger47
  • 7,001
  • 2
  • 21
  • 29
6

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.

Bart
  • 19,692
  • 7
  • 68
  • 77
pcpratts
  • 388
  • 3
  • 6
2

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.

user619318
  • 29
  • 1
1

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

Andy
  • 11
  • 1