RFR: 8353786: Migrate Vector API math library support to FFM API [v12]
Hamlin Li
mli at openjdk.org
Wed Apr 23 08:50:53 UTC 2025
On Wed, 23 Apr 2025 01:02:19 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
>> Migrate Vector API math library (SVML and SLEEF) linkage from native code (in JVM) to Java FFM API.
>>
>> Since FFM API doesn't support vector calling conventions yet, migration affects only symbol lookup for now. But it still enables significant simplifications on JVM side.
>>
>> The patch consists of the following parts:
>> * on-demand symbol lookup in Java code replaces eager lookup from native code during JVM startup;
>> * 2 new VM intrinsics for vector calls (support unary and binary shapes) (code separated from unary/binary vector operations);
>> * new internal interface to query supported CPU ISA extensions (`jdk.incubator.vector.CPUFeatures`) used for CPU dispatching.
>>
>> `java.lang.foreign` API is used to perform symbol lookup in vector math library, then the address is cached and fed into corresponding JVM intrinsic, so C2 can turn it into a direct vector call in generated code.
>>
>> Once `java.lang.foreign` supports vectors & vector calling conventions, VM intrinsics can go away.
>>
>> Performance is on par with original implementation (tested with microbenchmarks on linux-x64 and macosx-aarch64).
>>
>> Testing: hs-tier1 - hs-tier6, microbenchmarks (on linux-x64 and macosx-aarch64)
>>
>> Thanks!
>
> Vladimir Ivanov has updated the pull request incrementally with one additional commit since the last revision:
>
> Avoid thread state transition in VectorSupport_GetCPUFeatures
Found another possible issue on riscv.
src/jdk.incubator.vector/share/classes/jdk/incubator/vector/VectorMathLibrary.java line 288:
> 286: IntFunction<VectorSupport.UnaryOperation<V,?>> implSupplier,
> 287: V v) {
> 288: var entry = lookup(op, opc, vspecies, implSupplier);
Seems there is another issue for riscv here.
If the rvv extension is not supported on the running machine, it will still generate the code using rvv, this should lead to a crash at runtime?
-------------
PR Review: https://git.openjdk.org/jdk/pull/24462#pullrequestreview-2786445269
PR Review Comment: https://git.openjdk.org/jdk/pull/24462#discussion_r2055551021
More information about the hotspot-compiler-dev
mailing list