如何在Java中使用Intel AVX?

问题描述 投票:6回答:5

如何使用Java中的Intel AVX向量指令集?这是一个简单的问题,但答案似乎很难找到。

java simd avx
5个回答
3
投票

据我所知,大多数当前的Java JVM JITter不支持自动向量化,或者仅支持非常简单的循环,因此您很不走运。

在Mono的.NET实现中,有Mono.Simd用于手动矢量代码发射,然后后来MS引入了System.Numeric.Vectors。不幸的是,Java中没有类似的东西。我不知道Java的向量类是否使用SIMD进行向量化,但我认为不是。

如果要使用特定于CPU的功能(例如AVX),则唯一的选择是JNI。用C或C ++编写瓶颈部分,然后从Java调用它]

Scala的另一种解决方案是使用矢量化代码而不修改您可以在How we made the JVM 40x faster中读取的JVM


更新:

现在正在开发一种新的Vector API,用于手动编写矢量代码

提供孵化器模块jdk.incubator.vector的初始迭代,以表达向量计算,该向量计算在运行时可靠地编译为支持的CPU架构上的最佳向量硬件指令,从而获得优于同等标量计算的性能。

https://openjdk.java.net/jeps/338

  • Oracle and Intel seek to build a Java API for SIMD support

  • 阅读更多:


    1
    投票

    要从Java使用这些操作,您需要一个JavaCV之类的库。此库可对Intel处理器和GPU(如NVIDIA)启用矢量操作。


    1
    投票

    根据工作,您可能不必做很多事情。 JVM在支持Haswell和Xeon v3等平台的阵列和String上的某些操作上自动使用AVX2。


    0
    投票

    一种选择是使用Aparapi并安装Intel OpenCL驱动程序。 (只要安装了适当的OpenCL驱动程序,您的代码就会被向量化以在CPU和GPU上都可以使用。)


    0
    投票

    检查yeppp库。它具有Java绑定及其非常快速的跨平台SIMD库。

    最新问题
    © www.soinside.com 2019 - 2025. All rights reserved.