Java16的Vector API更好支持机器学习


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) 原语或其他加密原语。