我该如何从Java中使用Intel AVX向量指令集?这是一个简单的问题,但答案似乎很难找到。
根据工作的不同,您可能不需要做太多工作。在支持平台上(例如Haswell及其以后版本和Xeon v3及其以后版本),JVM会自动在某些数组和字符串操作中使用AVX2。
https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX2
从Ryzen 3 / Epyc Rome开始,您也可以在AMD处理器上获得单周期AVX2: https://www.anandtech.com/print/14525/amd-zen-2-microarchitecture-analysis-ryzen-3000-and-epyc-rome 但是,直接使用指令和内部函数并不容易。Java 19现在支持使用新的向量指令API进行SIMD,这个API比JNI实现快得多。 它直接将你的Java方法调用转换为内联汇编指令。 请查看:https://vksegfault.github.io/posts/java-simd/
要从Java中使用这些操作,您需要像JavaCV这样的库。该库可以为Intel处理器和NVIDIA等GPU启用向量操作。
一种选择是使用Aparapi并安装Intel OpenCL驱动程序。(只要安装了适当的OpenCL驱动程序,您的代码将被矢量化以在CPU和GPU上运行。)
另一种选择是使用JNI并调用使用AVX内部函数或由编译器自动矢量化的C++函数。