using JNI math libraries

I was reading on the AMD dev forums and came across the article http://www.nag.co.uk/IndustryArticles/HighPerformanceMathLibraries.pdf and noticed the order of magitude performance gains by using the AMD Core Math Library. I also came across the site https://mtj.dev.java.net/ with Java bindings for BLAS. Would there be any benefit of using these libraries for heavy matrix manipulations once the overhead of JNI was factored in?

Maybe. As it would be undesirable for the JNI to lock large arrays for the duration of some of these algorithms (blocking GC), it would probably be preferable to keep the matrices in direct allocated java.nio.Buffer type objects. This may then make the Java api less friendly. Then depending on the problem size you may be better off with something like the Colt libraries instead (which are pure Java).
http://hoschek.home.cern.ch/hoschek/colt/.

Using JNI would be even worse if the JVM copied data rather than merely pinning the array at a fixed location. I don’t know how many JVM do this, but the specification permits it. Again using buffers avoids this, but it isn’t cost free.

I’d just have to say that it is probably unlikely GC will be occuring at this stage in a game environment - you’ll probably have one thread doing all the computation (and hence, all the allocation), and therefore no garbage will be generated while this JNI is going on.

Cas :slight_smile:

This would be a factor that someone planning a library for more general use might (should) consider. On the other hand if you do your own JNI for use solely in games then you could ignore the issue.

What sort of a game would require the kind of matrix size that would make using these libraries via JNI worthwhile?

What about some benchmark?