Java中的AVX/AVX2支持,无JNI开销

Java中的AVX/AVX2支持,无JNI开销,java,simd,intrinsics,avx,avx2,Java,Simd,Intrinsics,Avx,Avx2,我正在寻找Java11+项目中的AVX/AVX2支持。我发现了一些Java8材料,但大多数都过时了。我知道,通过JNI使用AVX是可能的,但我想知道是否有可能消除(或最小化)JNI开销。我想优化一些矩阵运算。我希望执行将要执行的操作,而不将此决定留给JIT 我考虑一些类似于手动AVX的支持,基于注释或不安全/孵化器类,这将由JVM实现提供 我找到了巴拿马计划,但是关于这个计划的信息很少。 你对这个话题有什么经验或想法吗。还有其他选择吗 注释: JNI可以使用AVX: 巴拿马项目网站: 你想做什么

我正在寻找Java11+项目中的AVX/AVX2支持。我发现了一些Java8材料,但大多数都过时了。我知道,通过JNI使用AVX是可能的,但我想知道是否有可能消除(或最小化)JNI开销。我想优化一些矩阵运算。我希望执行将要执行的操作,而不将此决定留给JIT

我考虑一些类似于手动AVX的支持,基于注释或不安全/孵化器类,这将由JVM实现提供

我找到了巴拿马计划,但是关于这个计划的信息很少。

你对这个话题有什么经验或想法吗。还有其他选择吗

注释

  • JNI可以使用AVX:
  • 巴拿马项目网站:

  • 你想做什么?如果CPU支持,JIT将生成AVX(2)指令。因此,您可以使用AVX:此外,请尝试
    -XX:+printsassembly
    @JCWasmx86:有些算法很容易自动矢量化,而有些算法甚至很难让GCC或clang等超前编译器矢量化为良好的SIMD asm,但对于使用内部函数的人来说也是可能的。自动矢量化,特别是来自JIT编译器的自动矢量化,并不能涵盖所有情况,特别是在有趣的无序化有用的情况下。(我只希望JIT能很好地处理纯垂直SIMD,比如
    a[I]+=b[I]*c[I];
    首先,在尝试优化JNI开销之前,您是否已经证明了这种开销在您的情况下是显著的?JNI并没有那么慢。而且还需要进一步降低开销。您想做什么?JIT将生成AVX(2)指令,如果您的CPU支持的话。我没有找到一个好的源代码,但这里有JVM中的代码,它会发出AVX指令。因此,您可以遵循AVX的使用:此外,请尝试
    -XX:+printsassembly
    @JCWasmx86:有些算法很容易自动矢量化,有些算法甚至很难用于GCC或clang to vec之类的超前编译器自动矢量化,特别是来自JIT编译器的自动矢量化,并不能涵盖所有情况,尤其是有趣的混洗有用的情况。(我只希望JIT能很好地处理纯垂直SIMD,比如
    a[I]+=b[I]*c[I]
    首先,在尝试优化JNI开销之前,您是否已经证明了这种开销在您的案例中是非常重要的?JNI并没有那么慢。而且还有进一步降低开销的方法。