甲骨文和英特爾開發(fā)支持 SIMD 的 Java API 以提升性能
Java Vector API 旨在提供一個(gè)機(jī)制用于在 Java 中編寫復(fù)雜的向量(vetor)算法。
甲骨文和英特爾正在開發(fā)一種 Java API 來為平臺(tái)添加對(duì)向量(vector)或單指令多數(shù)據(jù)流(SIMD)的“一級(jí)(first-class)”支持,這將會(huì)帶來巨大的性能提升。
作為專注于互連 JVM 和原生代碼的 Panama 項(xiàng)目的一部分,這個(gè) API 旨在提供 incubator 模塊 jdk.incubator.vector 的初始迭代,以用于表達(dá)向量計(jì)算 —— 在運(yùn)行時(shí)階段編譯為所支持的 CPU 架構(gòu)上的最佳硬件指令。計(jì)劃支持 Graal 編譯器,項(xiàng)目的目標(biāo)包括:
-
提供清晰簡(jiǎn)潔的 API,能夠表達(dá)各種矢量計(jì)算
-
在 x64 架構(gòu)上提供可靠的運(yùn)行時(shí)編譯和性能
-
兼容不同的架構(gòu)
-
優(yōu)雅降級(jí):如果矢量計(jì)算無(wú)法在運(yùn)行時(shí)階段作為序列完全表達(dá),或者因?yàn)?nbsp;x64 架構(gòu)不支持某些指令,或其他 CPU 架構(gòu)不被支持,那么 Vector API 的實(shí)現(xiàn)會(huì)優(yōu)雅地降級(jí),但仍然會(huì)起作用。開發(fā)者也會(huì)收到有關(guān)此問題的警告
如果甲骨文和英特爾能兌現(xiàn)這個(gè)承諾,Java Vector API 將會(huì)提供一種這樣的機(jī)制 —— 利用 HotSpot 虛擬機(jī)中的現(xiàn)有支持進(jìn)行矢量化,從而在 Java 中編寫復(fù)雜的矢量算法。使用向量運(yùn)算,一定程度的并行可以在單個(gè) CPU 周期內(nèi)完成更多工作。因此,可以獲得顯著的性能提升。API 中的用戶模型(user model)將利用底層的矢量硬件,從而使得矢量化更具可預(yù)測(cè)性。
在這一方面,甲骨文和英特爾表示,該提案并未引用一個(gè)特定的 Java 版本作為 API 依賴的版本,但該項(xiàng)目的范圍僅適用于 Java SE。另外,該項(xiàng)目存在一個(gè)這樣的風(fēng)險(xiǎn) —— 在 x64 架構(gòu)上,API 可能會(huì)偏向于 SIMD,不過其他架構(gòu)也將會(huì)被考慮在內(nèi),特別是 ARM Scalar Vector 擴(kuò)展架構(gòu)。