[foreign-jextract] RFR: 8237573: Add a basic call overhead benchmark

Maurizio Cimadamore mcimadamore at openjdk.java.net
Wed Mar 25 21:51:56 UTC 2020


On Wed, 25 Mar 2020 17:53:51 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

> Hi,
> 
> Per my earlier email [1], this PR adds some basic call overhead benchmarks.
> 
> 2 benchmarks are added:
> - CallOverhead, which measures both an empty and an identity function call.
> - PointsDistance, which extends the existing points benchmarks with one that measures the distance between 2 points doing
>   the calculation is C (using a native call).
> 
> The latter also shows the difference between passing a pointer to a struct, vs passing a struct by value,
> PointsDistance.panama_MemoryAddress and PointsDistance.panama_MemorySegment respectively.
> This acts as a basis to test the coming performance improvements in this area.
> 
> Thanks,
> Jorn
> 
> [1] : https://mail.openjdk.java.net/pipermail/panama-dev/2020-March/008007.html

I'm also getting an exception when running PointDistance, ultimately caused by this:

Caused by: java.lang.IllegalStateException: Unexpected value layout: could not determine ABI class
	at
jdk.incubator.foreign/jdk.internal.foreign.abi.x64.sysv.CallArranger.lambda$classifyValueType$2(CallArranger.java:434)
In the PanamaPoint static init. The problem has to do with the fact that we're using a struct layout which contains
JAVA_INT in them to create  a function descriptor. This is probably OK on Windows because structs are passed by
pointer, but not on linux where we need to classify them recursively.

test/micro/org/openjdk/bench/jdk/incubator/foreign/points/support/libPoint.c line 23:

> 22:  */
> 23: #include <math.h>
> 24:

Suggestion:

#include <stdlib.h>
#include <math.h>

-------------

PR: https://git.openjdk.java.net/panama-foreign/pull/65


More information about the panama-dev mailing list