[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