良许Linux教程网 干货合集 FPGA难懂?与GPU类比一下就明白了

FPGA难懂?与GPU类比一下就明白了

FPGA是一种可以通过路由网络(routing network)连接的查找表2D网格,以及一些算术单元和内存,而不是一些需要连接(wire up)的晶体管堆。使用FPGA可以模拟任意电路,但实际上只是在模拟,就像软件电路仿真器模拟电路一样。之前提到的说法过于简化了人们实际使用FPGA的方式。

电路模拟是FPGA的经典主流用例,这也是FPGA最早出现的原因。FPGA的重点在于硬件设计是用HDL(硬件描述语言)形式编码的,并且可以通过购买一些廉价硬件来获得与ASIC(应用特定集成电路)相同的效果。当然,在FPGA和真正的芯片上使用的Verilog代码不可能完全相同,但它们的抽象范围是一样的。

计算加速是FPGA的新兴用例,这与电路仿真是不同的。最近微软成功地利用FPGA加速了搜索和深度神经网络,其中关键的是,计算实例并不依赖于FPGA和真正的ASIC之间的关系。开发人员针对基于FPGA的加速编写的Verilog代码不需要与用于流片的Verilog代码相似。

image-20231213192015260
image-20231213192015260

这两种实例在编程、编译器和抽象方面存在巨大差异。我比较关注后者,我将其称为「计算 FPGA 编程」(computaTIonal FPGA programming)。我的论点是,目前计算 FPGA 的编程方法都借鉴了传统的电路仿真编程模型,这是不对的。如果你想开发 ASIC 原型的话,Verilog 和 VHDL 都是正确的选择。但如果目标是计算的话,我们可以也应该重新思考整个堆栈。

让我们开门见山地说吧。FPGA 是一类很特殊的硬件,它用来高效执行模拟电路描述的特殊软件。FPGA 配置需要一些底层软件——它是为了 ISA 编写的程序。

这里可以用 GPU 做类比。

在深度学习和区块链盛行之前,有一段时间 GPU 是用来处理图形的。在 21 世纪初,人们意识到他们在处理没有图形数据的计算密集型任务时,也会大量使用 GPU 作为加速器:GPU 设计师们已经构建了更通用的机器,3D 渲染只是其中一个应用而已。

image-20231213192018545
image-20231213192018545

FPGA的定义以及和GPU的类比

计算 FPGA 遵循了相同的轨迹。我们的想法是要多多使用这一时兴的硬件,当然不是为了电路仿真,而是利用适合电路执行的计算模式,用类比的形式来看 GPU 和 FPGA。

为了让 GPU 发展成今天的数据并行加速器,人们不得不重新定义 GPU 输入的概念。我们过去常常认为 GPU 接受奇特的、强烈的、特定领域的视觉效果描述。我们实现了 GPU 执行程序,从而解锁了它们真正的潜力。这样的实现让 GPU 的目标从单个应用域发展为整个计算域。

我认为计算 FPGA 正处于类似的转变中,现在还没有针对 FPGA 擅长的基本计算模式的简洁描述。但它和潜在的不规则并行性、数据重用以及大多数静态的数据流有关。

和 GPU 一样,FPGA 也需要能够体现这种计算模式的硬件抽象,Verilog 用于计算 FPGA 的问题在于它在低级硬件抽象中效果不好,在高级编程抽象中的效果也不好。让我们通过反证法想象一下,如果用 RTL(寄存器传输级)取代这些角色会是什么样。

甚至 RTL 专家可能也无法相信 Verilog 是可以高效开发主流 FPGA 的方式。它不会把编程逻辑推向主流。对于经验丰富的硬件黑客来说,RTL 设计似乎是友好而熟悉的,但它与软件语言之间的生产力差距是不可估量的。

事实上,对现在的计算 FPGA 来说,Verilog 实际上就是 ISA。主要的 FPGA 供应商工具链会将 Verilog 作为输入,而高级语言的编译器则将 Verilog 作为输出。供应商一般会对比特流格式保密,因此 Verilog 在抽象层次结构中会处于尽可能低的位置。

把 Verilog 当做 ISA 的问题是它和硬件之间的距离太远了。RTL 和 FPGA 硬件之间的抽象差距是巨大的,从传统角度讲它至少要包含合成、技术映射以及布局布线——每一个都是复杂而缓慢的过程。因此,FPGA 上 RTL 编程的编译/编辑/运行周期需要数小时或数天,更糟糕的是,这是一个无法预测的过程,工具链的深层堆栈可能会掩盖 RTL 中的改变,这可能会影响设计性能和能源特性。

好的 ISA 应该直接展示底层硬件未经修饰的真实情况。像汇编语言一样,它其实不需要很方便编程。但也像汇编语言一样,它的编译速度需要非常快,而且结果可预测。如果想要构建更高级的抽象和编译器,就需要一个不会出现意外的低级目标。而 RTL 不是这样的目标。

如果计算 FPGA 是特定类算法模式的加速器,那当前的 FPGA 并不能理想地实现这一目标。在这个游戏规则下能够击败 FPGA 的新硬件类型,才可能带来全新的抽象层次结构。新的软件栈应该摒弃 FPGA 在电路仿真方面的遗留问题,以及 RTL 抽象。以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部