[PPL-devel] On the performance and expressiveness of the PPL java bindings
Gianluca Amato
amato at sci.unich.it
Mon Feb 25 11:48:58 CET 2013
Hi all,
I am using the PPL library from Java (hmm.. Scala, actually) to make
experiments on abstract interpretation based static analysis. I would
like to share some considerations about a couple of aspects of the Java
bindings which I believe could be improved.
First aspect is performance. Obviously, using native libraries in the
JVM always incurs a certain amount of performance penalty. I tried to
develop a native implementation of Double_Box, and it is much faster
than using the Double_Box fron PPL (the native implementation is not
safe since I cannot control rounding mode within Java, but I do not
think this impacts performance a lot). Obviously for more complex
domains the overhead of calling native methods is proportionally lower.
My question is: is it possible to improve performance of the Java
bindings? I am not an expert in JNI, but from a fast scan of the code,
it seems the Java code passes to the native methods an object. The
native code calls some accessor function to get the ptr field (which is
the pointer to the native PPL object). It should be possible to rewrite
the native functions so that they receive directly the pointer, and
therefore do not need to call the accessor methods. From what I have
heard, calling accessor methods is slow. Has this approach been pursued
and abandoned or not? Do you think it could produce a noticeable
improvement in performance?
The other point regards expressiveness. Java classes in PPL form a flat
hierarchy. This makes difficult to write generic code, parametric w.r.t.
the abstract domain. In C++ there is a flat hierarchy, too, but there
templates may be used to write generic code effectively. In Java, the
only choices to write generic code are either to use reflection (which
is quite costly) or to write thin wrappers over the PPL classes, and put
wrappers in a hierarchy, (which is tedious). Who works in Scala may use
macros, but in any case, writing generic code is cumbersome, and the
model of a flat hierarchy is against standard Java best-practices.
Would it be possible to define an interface which declares all the
methods in common between the PPL domains? The domains could implement
this interface. This would allow to write generic code by just
exploiting the subclass relationship.
Sorry for the long mail. I am very interested to know the opinion of the
PPL developer and users on this points.
Cheers,
--gianluca
More information about the PPL-devel
mailing list