半导体行业观察 · 2021年09月08日

CUDA被移植,基于RISC - V的GPU有戏了?

来源:内容来自半导体行业观察综合,谢谢。

RISC-V 一直是计算领域最热门的话题之一,因为这个指令集架构 (ISA) 允许进行广泛的定制并且易于理解,此外还有整个开源、免许可的好处。甚至还有一个基于 RISC-V ISA 设计通用 GPU 的项目,现在我们正在见证英伟达的 CUDA 软件库移植到 Vortex RISC-V GPGPU 平台。

Nvidia 的 CUDA(计算统一设备架构)代表了一个独特的计算平台和应用程序编程接口 (API),它运行在 Nvidia 的显卡系列上。当为 CUDA 支持编写应用程序时,只要系统发现基于 CUDA 的 GPU,它就会获得大量的代码 GPU 加速。

今天,研究人员研究了一种在名为 Vortex的RISC-V GPGPU 项目上启用 CUDA 软件工具包支持的方法。Vortex RISC-V GPGPU 旨在提供基于 RV32IMF ISA 的全系统 RISC-V GPU。这意味着 32 位内核可以从 1 核扩展到 32 核 GPU 设计。它支持 OpenCL 1.2 图形 API,今天它还支持一些 CUDA 操作。

研究人员解释说:“……在这个项目中,我们提出并构建了一个pipeline来支持端到端的 CUDA 迁移:pipeline接受 CUDA 源代码作为输入并在扩展的 RISC-V GPU 架构上执行它们。我们的pipeline包括几个步骤:将CUDA源代码翻译成NVVM IR,将NVVM IR转换成SPIR-V IR,将SPIR-V IR转发成POCL得到RISC-V二进制文件,最后在扩展的RISC-V GPU上执行二进制文件架构。”

这个过程在上图中可视化,显示了让它工作的所有步骤。简单来说,CUDA 源代码以称为 NVVM IR 的中间表示 (IR) 格式表示,基于开源 LLVM IR。它后来被转换为标准便携式中间表示 (SPIR-V) IR,然后将其转发到 OpenCL 标准的便携式开源实现中,称为 POCL。由于 Vortex 支持 OpenCL,因此它提供了受支持的代码,并且可以毫无问题地执行它。

**有关此复杂过程的更多详细信息,请查看链接:。**重要的是,您必须感谢这些研究人员为使 CUDA 能够在 RISC-V GPGPU 上运行所做的努力。虽然这只是目前的一小步,但它可能是 RISC-V 用于加速计算应用程序时代的开始,这与 Nvidia 今天的 GPU 阵容非常相似。

延伸阅读:RISC-V能改变GPU吗?

RISC-V能处理GPU的事务吗?这项工作正在进行中,可以通过创建一个具有自定义可编程性和可扩展性的小型区域高效设计来实现这一目标。

任何研究过GPU架构的人都知道这是矢量处理器的SIMD构造。它是一种超高效的并行处理器,已用于从运行模拟和出色的游戏到教导机器人如何获取AI以及帮助聪明的人操纵股票市场的所有事物。它甚至在我写这篇文章的时候检查我的语法。

但GPU领域已经成为一个私有领域,其内部工作是由AMD、Intel、Nvidia等开发者的IP和秘密武器所完成的。如果有一套新的图形指令设计为3D图形和媒体处理呢?嗯,可能有。

新的指令正在RISC-V基本向量指令集上构建。他们将根据核心RISC-V ISA的精神,添加对特定于图形的新数据类型的支持,作为分层扩展。支持向量,先验数学,像素和纹理以及Z / Frame缓冲区操作。它可以是融合的CPU-GPU ISA。lilibrary -RISC 3D组称它为RV64X (图1) ,因为指令将是64位长(32位将不足以支持一个健壮的ISA)。

图1.RV64X图形处理器除了专用的纹理单元和功能块外,还包括多个DSP。

该组织表示,他们的动机和目标是希望创造一个小型、高效的设计,具有自定义的可编程性和可扩展性。它应该提供低成本的IP所有权和开发,而不是与商业产品竞争。它可以在FPGA和ASIC目标上实现,并且是免费和开源的。最初的设计目标是低功耗微控制器,将兼容Khronos Vulkan,并支持其他api (OpenGL, DirectX等)。

GPU + RISC-V

目标硬件将有一个GPU功能单元和一个RISC-V核心。该组合以64位指令编码为标量指令的处理器的形式出现。关键在于编译器将从带前缀的标量操作码生成SIMD指令。其他功能包括可变问题、基于谓词的SIMD后端;分支跟踪;精确的异常;和矢量前端。设计将包括一个16位定点版本和一个32位浮点版本。前者适用于FPGA实现。

该团队说:“不需要使用RPC / IPC调用机制来将3D API调用发送到未使用的CPU内存空间或从未使用的CPU内存空间发送到GPU内存空间,反之亦然,”

“融合” CPU-GPU ISA方法的优势在于可以在微代码中使用标准图形管道,并且可以支持自定义着色器。甚至可以包括光线追踪扩展。

该设计将采用Vblock格式(来自Libre GPU的努力):

  • 这有点像VLIW(但不是真的)。
  • 指令块之前带有寄存器标记,这些标记为该块内的标量指令提供了额外的上下文。
  • 子块包括向量长度,旋转,向量/宽度覆盖和预测。
  • 所有这些都添加到标量操作码中!
  • 没有矢量操作码(也不需要任何操作码)。
  • 在矢量上下文中,它是这样的:如果标量操作码使用寄存器,并且该寄存器在矢量上下文中列出,则将激活矢量模式。
  • 激活会导致硬件级别的for循环发出多个连续的标量运算(而不只是一个)。
  • 实现者可以自由地以他们想要的任何方式来实现循环-SIMD,多问题,单执行;几乎任何东西。

RV32-V向量处理2到4个元素的8位,16位或32位/元素的向量操作。对于用于64位和128位固定和浮点XYZW点的常规3D图形渲染管线,还将有专门的指令。8、16、24和32位RGBA像素; 8位,每个组件16位UVW纹素;以及灯光和材质设置(Ia,ka,Id,kd,Is,ks等)。

属性向量表示为4×4矩阵。该系统将本地支持2×2和3×3矩阵。向量支持也可能适用于使用AI和机器学习应用程序中常见的8位整数数据类型的数值模拟。

设计中可以包含自定义光栅化器,例如样条线,SubDiv曲面和面片。该方法还允许包含自定义管线阶段,自定义几何/像素/帧缓冲阶段,自定义细分器和自定义实例化操作。

RV64X

RV64X参考实现包括:

  • 指令/数据SRAM缓存(32 kB)
  • 微码SRAM(8 kB)
  • 双功能指令解码器(实现RV32V和X的硬连线;用于自定义ISA的微编码指令解码器)
  • 四向量ALU(32位/ ALU-固定/浮动)
  • 136位寄存器文件(1k个元素)
  • 特殊功能单元
  • 纹理单位
  • 可配置的本地帧缓冲区

RV64X是可扩展的架构(图2)。它的融合方法是新的,对于自定义数据类型使用可配置寄存器也是如此。用户定义的基于SRAM的微代码可用于实现扩展,例如自定义光栅化器阶段,光线跟踪,机器视觉和机器学习。单一设计可以应用于独立的图形微控制器或具有可扩展着色器单元的多核解决方案。

<图2.RV64X可以从简单的低端设计(左)扩展到多核解决方案(右)。

RISC-V的图形扩展可以解决可伸缩性和多语言问题。这可以实现更高级别的用例,从而带来更多的创新。

下一步是什么

RV64X规范仍在早期开发中,可能会发生变化。正在建立一个讨论论坛。近期目标是使用指令集模拟器构建示例实现。这将在使用开放源代码IP和设计为开放源代码项目的自定义IP的FPGA实现上运行。

推荐阅读
关注数
11058
内容数
1772
最有深度的半导体新媒体,实讯、专业、原创、深度,50万半导体精英关注。专注观察全球半导体最新资讯、技术前沿、发展趋势。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息