Java16的Vector API更好支援機器學習

banq發表於2021-12-09

Vector API 提供了一種用 Java 編寫跨平臺資料並行演算法的機制,例如複雜的數學和基於陣列的運算。
Vector API 提供了一個可移植的 API 來表達向量數學計算。API 的第一次迭代由JEP 338提出並整合到 Java 16 中。第二個孵化器JEP 414是 Java 17 的一部分。第三個孵化器正在進行中,目前針對 Java 18 作為JEP 417
這項工作是Java 專案 Panama 的一部分,它加強了 JVM 和非 Java API(也稱為外部API)之間的許多聯絡,包括使向量數學內在函式成為 HotSpot JVM 的一部分(因此成為核心 Java 的一部分) .
 Project Panama 使 Java 程式設計師可以更好地訪問 CPU 的所有現代功能。CPU 可以做的一件令人興奮的事情是 SIMD(單指令多資料)處理,它提供了透過程式的多通道資料流。可能有 4 條通道或 8 條通道或任意數量的單個資料元素流經的通道——並且 CPU 一次在所有通道上並行組織操作。正如您所料,這極大地提高了吞吐量。
透過 Vector API,Java 團隊正在努力讓 Java 程式設計師使用 Java 程式碼直接訪問它;過去,他們必須在彙編程式碼級別對向量數學進行程式設計。
在 25 年前首次設計 Java 時,SIMD 微處理器功能並不重要,但今天它們變得更加標準和廣泛。如果您要獲得現代 CPU 的全部優勢,那麼現在就需要能夠使用 SIMD 指令和多個並行執行的通道。藉助 Vector API,Java 正在以一種新的方式進入該領域,即使用本機 Java 程式碼。
HotSpot 編譯器將您使用此 API 在向量例項上執行的所有方法呼叫轉換為與特定硬體平臺的功能緊密匹配的硬體和向量結構。這允許您以獨立於平臺的方式使用 SIMD 處理以資料並行的方式進行程式設計;您不必瞭解或瞭解底層硬體。
您可能會使用標量迴圈編寫程式碼,這些迴圈一次在一個元素上執行。那很慢。現在,您可以使用 Vector API 將標量演算法轉換為速度更快的資料並行演算法,從而獲得一個非常清晰、編寫良好且在多個平臺上執行良好的應用程式。
基本上,Vector API 提供了效能和可移植性。
您可以構建一些有趣的演算法,例如並行提取和存款操作,這些操作尚未在所有平臺上進行向量化,或者使用高階加密標準 (AES) 原語或其他加密原語。
 

相關文章