如何在java中使用Intel i7 avx?

时间:2014-12-27 09:17:32

标签: java avx

如何使用Java的Intel i7 Vector处理器(AVX)?这是一个简单的问题,但答案似乎很难找到。

5 个答案:

答案 0 :(得分:2)

据我所知,目前大多数Java JVM JIT都不支持自动矢量化,也不支持非常简单的循环,所以你运气不好。

在Mono的.NET实现中,Mono.Simd用于手动矢量代码发射,但在Java中没有类似的东西。我不知道Java的vector类是否使用SIMD进行矢量化,但我认为不是。

如果您想使用像AVX这样的CPU特定功能,那么您唯一的选择就是JNI。用C或C ++编写瓶颈部分并从Java中调用它

更多信息:

答案 1 :(得分:1)

要在Java中使用这些操作,您需要一个像JavaCV这样的库。此库可以为英特尔处理器和GPU(如NVIDIA)启用矢量操作。

答案 2 :(得分:1)

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

https://software.intel.com/en-us/articles/java-application-performance-improvement-with-intel-xeon-processor-e7-v3

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

直接使用指令和内在函数并不容易。

答案 3 :(得分:0)

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

另一个选择是使用JNI并调用使用AVX内在函数的C ++函数或由编译器自动向量化。

答案 4 :(得分:0)

检查yeppp库。 它有java绑定和非常快速的跨平台SIMD库。

http://www.yeppp.info