HPVM 2.0,CPU、GPU、FPGA和硬件加速器的编译器已发布

LLVM项目宣布发布HPVM 2.0(异构并行虚拟机),这是一个编译器,旨在简化异构系统的编程,并为CPU、GPU、FPGA和特定领域的硬件加速器提供代码生成工具。 项目代码根据 Apache 2.0 许可证分发。

异构并行系统的编程由于同一系统中存在使用不同模型来实现并行性(CPU 内核、向量指令、GPU 等)、不同指令集和不同内存层次结构的组件而变得复杂。 每个系统都使用自己的这些组​​件的组合。 HPVM项目的主要思想是在编译时使用并行执行程序的统一表示,可用于支持并行计算的各种类型的硬件,包括GPU、向量指令、多核处理器、FPGA和各种专用加速器芯片。

与其他系统不同,HPVM 尝试结合三种能力来组织异构计算 - 编程语言和硬件独立的中间表示 (IR)、虚拟指令集架构 (V-ISA) 和运行时调度:

  • HPVM 中间表示通过使用分层数据流图来捕获任务、数据和管道级别的并行性,从而扩展了指令的 LLVM 中间表示。 HPVM 中间表示还包括向量指令和共享内存。 使用中间表示的主要目的是异构系统的高效代码生成和优化。
  • 虚拟指令集架构 (V-ISA) 抽象了低级硬件功能,并仅使用基本并行模型(数据流图)统一了各种形式的并行性和内存架构。 V-ISA允许您实现不同类型设备之间的可移植性以进行并行计算,并使得在使用异构系统的不同元素时不损失性能成为可能。 虚拟 ISA 还可用于提供可使用 CPU、GPU、FPGA 和各种加速器运行的通用可执行程序代码。
  • 计算过程的灵活调度策略在运行时应用,并基于有关程序的信息(图形结构)以及通过编译各个程序节点以在系统中可用的任何目标计算设备上执行来实现。

该项目开发的代码生成器能够转换使用虚拟 ISA 定义的应用程序节点,以便使用 NVIDIA GPU(cuDNN 和 OpenCL)、Intel AVX 矢量指令、FPGA 和多核 x86 CPU 执行。 值得注意的是,HPVM 转换器的性能可与 GPU 和矢量计算设备的手写 OpenCL 代码相媲美。

HPVM 2.0的主要创新点:

  • 提出了 Hetero-C++ 语言前端,它简化了 C/C++ 应用程序代码的并行化,以便在 HPVM 中进行编译。 Hetero-C++ 定义了映射到 HPVM 线程图的数据级并行性和分层任务的扩展。
  • 添加了 FPGA 后端,为英特尔 FPGA 上的代码执行提供支持。 为了组织执行,使用了面向 OpenCL 的英特尔 FPGA SDK。
  • 添加了 DSE(设计空间探索)框架,其中包括编译器优化和识别瓶颈的机制,以自动调整给定硬件平台的应用程序。 该框架包含英特尔 FPGA 的现成性能模型,并且可以连接您自己的处理器,以优化 HPVM 支持的任何设备。 优化可以应用于 HPVM 和 LLVM 数据流图级别。
  • LLVM 组件已更新至版本 13.0。
  • 代码经过重新组织,可以更轻松地浏览代码库、库和实用程序。
  • 测试基础设施得到了改进,为各种 HPVM 组件添加了新的测试。

来源: opennet.ru

添加评论