1. 首页
  2. 教育
  3. 深度学习

两个定义能更好地描述FPGA

FPGA是一堆晶体管,你可以把它们连接(wireup)起来做出任何你想要的电路。它就像一个纳米级面包板。使用FPGA就像芯片流片,但是你只需要买这一张芯片就可以搭建不一样的设计,作为交换,你需要付出一些效率上的代价。
从字面上讲这种说法并不对,因为你并不需要重连(rewire)FPGA,它实际上是一个通过路由网络(routingnetwork)连接的查找表2D网格,以及一些算术单元和内存。FPGA可以模拟任意电路,但它们实际上只是在模仿,就像软件电路仿真器模拟电路一样。这个答案不恰当的地方在于,它过分简化了人们实际使用FPGA的方式。接下来的两个定义能更好地描述FPGA。
电路模拟是FPGA的经典主流用例,这也是FPGA最早出现的原因。FPGA的关键在于硬件设计是用HDL形式编码的,而且买一些便宜的硬件就可以得到和ASIC相同的效果。当然,你不可能在FPGA和真正的芯片上使用完全相同的Verilog代码,但至少它们的抽象范围是一样的。这是与ASIC原型设计不同的一个用例。和电路仿真不同,计算加速是FPGA的新兴用例。这也是微软最近成功加速搜索和深度神经网络的原因。而且关键的是,计算实例并不依赖于FPGA和真正ASIC之间的关系:开发人员针对基于FPGA的加速编写的Verilog代码不需要与用来流片的Verilog代码有任何的相似性。

FPGA是一堆晶体管,你可以把它们连接(wireup)起来做出任何你想要的电路。它就像一个纳米级面包板。使用FPGA就像芯片流片,但是你只需要买这一张芯片就可以搭建不一样的设计,作为交换,你需要付出一些效率上的代价。
从字面上讲这种说法并不对,因为你并不需要重连(rewire)FPGA,它实际上是一个通过路由网络(routingnetwork)连接的查找表2D网格,以及一些算术单元和内存。FPGA可以模拟任意电路,但它们实际上只是在模仿,就像软件电路仿真模拟电路一样。这个答案不恰当的地方在于,它过分简化了人们实际使用FPGA的方式。接下来的两个定义能更好地描述FPGA。
电路模拟是FPGA的经典主流用例,这也是FPGA最早出现的原因。FPGA的关键在于硬件设计是用HDL形式编码的,而且买一些便宜的硬件就可以得到和ASIC相同的效果。当然,你不可能在FPGA和真正的芯片上使用完全相同的Verilog代码,但至少它们的抽象范围是一样的。这是与ASIC原型设计不同的一个用例。和电路仿真不同,计算加速是FPGA的新兴用例。这也是微软最近成功加速搜索和深度神经网络的原因。而且关键的是,计算实例并不依赖于FPGA和真正ASIC之间的关系:开发人员针对基于FPGA的加速编写的Verilog代码不需要与用来流片的Verilog代码有任何的相似性。

两个定义能更好地描述FPGA

这两种实例在编程、编译器和抽象方面存在巨大差异。我比较关注后者,我将其称为「计算FPGA编程」(computaTIonalFPGAprogramming)。我的论点是,目前计算FPGA的编程方法都借鉴了传统的电路仿真编程模型,这是不对的。如果你想开发ASIC原型的话,Verilog和VHDL都是正确的选择。但如果目标是计算的话,我们可以也应该重新思考整个堆栈。
让我们开门见山地说吧。FPGA是一类很特殊的硬件,它用来高效执行模拟电路描述的特殊软件。FPGA配置需要一些底层软件——它是为了ISA编写的程序。这里可以用GPU做类比。在深度学习和区块链盛行之前,有一段时间GPU是用来处理图形的。在21世纪初,人们意识到他们在处理没有图形数据的计算密集型任务时,也会大量使用GPU作为加速器:GPU设计师们已经构建了更通用的机器,3D渲染只是其中一个应用而已。

两个定义能更好地描述FPGA

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抽象。

责任编辑:lq

免责声明:本站旨在传递信息,不代表有传资讯的观点和立场。本站遵循行业规范,如转载您的文章未标注版权,请联系我们(QQ:78799268)改正。本站的原创文章,如若转载,请注明出处:http://www.ainoline.cn/jiaoyu/shenduxuexi/16196.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:78799268@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code