您的位置 首页 应用

在FPGA上优化完成复数浮点核算

性能浮点处理一直与高性能CPU相关联。在过去几年中,GPU也成为功能强大的浮点处理平台,超越了图形,称为GP-GPU(通用图形处理单元)。新创新是在苛刻的应用中实现基于FPGA的浮点处理。本文的重点是

功用浮点处理一向与高功用CPU相关联。在曩昔几年中,GPU也成为功用强大的浮点处理渠道,逾越了图形,称为GP-GPU(通用图形处理单元)。新立异是在严苛的运用中完结根据FPGA的浮点处理。本文的重点是FPGA及其浮点功用和规划流程,以及OpenCL的运用,这是高功用浮点核算前沿的编程言语。

各种处理渠道的GFLOP目标在不断提高,现在,TFLOP/s这一术语现已运用的十分广泛了。可是,在某些渠道上,峰值GFLOP/s,即,TFLOP/s标明的器材功用信息有限。它只标明了每秒可以完结的理论浮点加法或许乘法总数。剖析标明,FPGA单精度浮点处理可以超越1 TFLOP/s。

一种不太杂乱的常用算法是FFT。运用单精度浮点完结了4096点FFT。它可以在每个时钟周期输入输出四个复数采样。每一个FFT内核运转速度超越80 GFLOP/s,大容量FPGA的资源支撑完结7个这类的内核。

可是,如图1所示,这一FPGA的FFT算法GFLOP/s挨近400 GFLOP/s。这是“按键式”OpenCL编译成果,不需求FPGA专业知识。运用逻辑确认和DSE进行优化,7内核规划挨近单内核规划的Fmax,将其GFLOP/s提升至500,超越了10 GFLOP/s每瓦。

这一每瓦GFLOP/s要比CPU或许GPU成效高许多。比照一下GPU,GPU在这些FFT长度上功率并不高,因而,没有进行基准测验。当FFT长度到达几十万个点时,GPU功率才比较高,可以为CPU供给有用的加快功用。

4.1.jpg

图1:Altera Stratix V 5SGSD8 FPGA浮点FFT功用。

总归,实践的GFLOP/s一般只到达峰值或许理论GFLOP/s的一小部分。出于这一原因,更好的办法是选用算法来比照功用,这种算法可以合理的标明典型运用的特性。算法越杂乱,典型实践运用的基准测验就越具有代表性。

并不是依托供货商的峰值GFLOP/s目标来确认处理技能,而是运用比较杂乱具有代表性的第三方评价。高功用核算抱负的算法是Cholesky分化。

这一算法常常用于线性代数,高效的解出多个方程,可以完结矩阵求逆功用。这一算法十分杂乱,要取得合理的成果总是要求浮点数值标明。核算需求与N3成正比,N是矩阵维度,因而,一般对处理要求很高。实践GFLOP/s取决于矩阵巨细以及所要求的矩阵处理吞吐量。

表1显现了根据Nvidia GPU目标1.35TFLOP/s的基准测验成果,运用了各种库,以及Xilinx Virtex6 XC6VSX475T,其密度到达475K LC,这种FPGA针对DSP处理进行了优化。用于Cholesky基准测验时,这些器材在密度上与Altera FPGA类似。

4.2.jpg

表1:田纳西州大学的GPU和Xilinx FPGA Cholesky基准测验。

LAPACK和MAGMA是商用库,而GPU GFLOP/s是指选用田纳西州大学开发的OpenCL完结的。关于小规划矩阵,后者更优化一些。

中等规划的Altera Stratix V FPGA (460kLE)也进行了基准测验,运用了单精度浮点Cholesky算法。如表2所示,在Stratix V FPGA上进行Cholesky算法的功用要比Xilinx成果高许多。

4.3.jpg

表2:BDTI的Altera FPGA Cholesky和QR基准测验。

应指出,矩阵巨细并不相同。田纳西州大学成果是从[512×512]矩阵巨细开端的。BDTI基准测验到达了[360×360]矩阵巨细。原因是,矩阵规划较小时,GPU功率十分低,因而,在这些运用中,不应该运用它们来加快CPU。在规划较小的矩阵时,FPGA的作业功率十分高。

其次,BDTI基准测验是根据每个Cholesky内核的。每个可参数赋值的Cholesky内核支撑挑选矩阵巨细,矢量巨细和通道数量。矢量巨细大致决议了FPGA资源。较大的[360×360]矩阵运用了较长的矢量,支撑这一FPGA中完结一个内核,到达91GFLOP/s。较小的[60×60] 矩阵运用的资源更少,因而,可以完结两个内核,总共是2×39=78GFLOP/s。最小的[30×30]矩阵支撑完结三个内核,总共是 3×26=78GFLOP/s。

FPGA看起来更合适处理数据规划较小的问题。原因之一是因为核算负载随N3而增大,数据I/O随N2增大,终究,跟着数据的添加,GPU的I/O瓶颈不再是问题。另一项考虑是吞吐量。跟着矩阵规划的增大,因为每个矩阵的处理量增大,矩阵每秒吞吐量会大幅度下降。在某些点,吞吐量变得十分低,以至于无法满意许多运用的要求。在许多情况下,会分化大规划矩阵,处理每个小的子矩阵,以处理因为巨大的处理负载形成的吞吐量约束问题。

关于FFT,核算负载添加N log2 N,而数据I/O随N增大而增大。关于规划较大的数据,GPU是高效的核算引擎。作为比照,数据长度很短时,FPGA是高效的核算引擎,更合适FFT长度到达数千的许多运用,关于GPU,FFT长度是数十万。

GPU和FPGA规划办法

运用Nvidia的专用CUDA言语或许敞开标准OpenCL言语对GPU进行编程。这些言语在才干上十分类似,而最大的不同在于CUDA只能用在Nvidia GPU上。

FPGA一般运用HDL言语Verilog或许VHDL进行编程。这些言语的最新版尽管选用了浮点数界说,不必进行归纳,但都不太合适支撑浮点规划。例如,在System Verilog中,短实数变量与IEEE单精度(浮点)对应,实数变量与IEEE双精度对应。

运用传统的办法,将浮点数据通路归纳到FPGA的功率十分低。Xilinx FPGA在Cholesky算法上的功用很低,它运用了Xilinx浮点内核生成功用,这证明了这一点。而Altera选用了两种不同的办法。第一种运用根据Mathworks的规划输入,称之为DSP Builder高档模块库。这一东西包含了对定点和浮点数的支撑。它支撑7种不同精度的浮点,包含IEEE半精度、单精度和双精度。它还支撑矢量化,这是高效完结线性代数所需求的。而最重要的是,它可以将浮点电路高效的映射到现在的定点FPGA体系结构中,如基准测验所示,规划中等的28 nm FPGA,Cholesky算法挨近了100GFLOP/s。作为比照,在不具有归纳才干的规划类似的Xilinx FPGA上,完结相同的算法,运用密度类似的FPGA,功用只要20GFLOP/s。

GPU编程人员比较了解OpenCL。面向FPGA的OpenCL编译意味着,面向AMD或许Nvidia GPU编写的OpenCL代码可以编译到FPGA中。Altera的OpenCL编译器支撑GPU程序运用FPGA,不需求娴熟的开发典型的FPGA规划。

运用支撑FPGA的OpenCL,相关于GPU有几个要害优势。首要,GPU的I/O是有约束的。一切输入和输出数据有必要由主CPU经过PCI接口进行传输。成果延时会让GPU处理引擎暂停,因而,下降了功用。

FPGA以各种宽带I/O功用而闻名。这些功用支撑数据经过千兆以太网和SRIO,或许直接从ADC和DAC输入输出FPGA。Altera界说了OpenCL标准的供货商专用扩展,以支撑流操作。

即便与I/O瓶颈无关,FPGA的处理延时也要比GPU低许多。众所周知,GPU有必要稀有千个线程才干高效的作业。这是因为存储器读取很长的延时,以及GPU许多的处理内核之间的延时。实践上,GPU有必要有许多使命才干使得处理内核不会暂停等候数据,否则会导致使命很长的延时。

而FPGA运用了“粗粒度并行”体系结构。它建立了多个经过优化的并行数据通路,每一通路一般在每个时钟周期输出一个成果。数据通路的例化数取决于 FPGA资源,但一般要比GPU内核数少许多。可是,每一数据通路例化的吞吐量要比GPU内核高得多。这一办法的首要优势是低延时。下降延时在许多运用中都是要害的功用优势。

FPGA的另一优势是很低的功耗,极大的下降了每瓦GFLOP/s。正如BDTI所丈量的,Cholesky等复数浮点算法的每瓦GFLOP/s是每瓦5~6GFLOP/s。一般很难进行GPU能效丈量,可是,Cholesky的GPU功用到达50GFLOP/s,典型功耗是200W,得到的成果是 0.25每瓦GFLOP/s,单位FLOP/s的功率高20倍。

OpenCL和DSP Builder都依托“交融数据通路”这种技能(图2),以这种技能完结浮点处理,可以大幅度削减桶形移位电路,然后支撑运用FPGA来开发大规划高功用浮点规划。

4.4.jpg

图2:浮点的交融数据通路完结。

为下降桶形移位频率,归纳进程尽可能运用较大的尾数宽度,然后不需求频率归一化和去归一化。27×27和36×36硬核乘法器支撑比单精度完结所要求的23位更大的乘法核算,54×54和72×72结构的乘法器支撑比52位更大的核算,这一般是双精度完结所要求的。FPGA逻辑现已针对大规划定点加法器电路进行了优化,包含了内置进位超前电路。

当需求进行归一化和去归一化时,另一种可以防止低功用和过度布线的办法是运用乘法器。关于一个24位单精度尾数(包含符号位),24×24乘法器经过乘以2n对输入移位。27×27和36×36硬核乘法器支撑单精度扩展尾数,可以用于构建双精度乘法器。

在许多线性代数算法中,矢量点乘(图3)是占用许多FLOP/s的底层运算。单精度完结长度是64的长矢量点乘需求64个浮点乘法器,以及随后由63个浮点加法器构成的加法树。这类完结需求许多桶形移位电路。

4.5.jpg

图3:矢量点乘优化。

相反,可以对64个乘法器的输出进行去归一化,成为公共指数,最大是64位指数。可以运用定点加法器电路对这些64路输出求和,在加法树的终究进行终究的归一化。如图3所示,这一本地模块浮点处理进程省掉了每一加法器所需求的暂时归一化和去归一化。即便是IEEE754浮点,最大指数根本决议了终究的指数,因而,这种改动只是在核算前期进行指数调整。

可是,进行信号处理时,在核算终究尽可能以高精度来切断成果才干取得最佳成果。这种办法进位额定的尾数,补偿了单精度浮点处理所需求的前期去归一化次优办法,一般从27位到36位。选用浮点乘法器进行尾数扩展,因而,在每一步不需求对乘积进行归一化。

留意,这一办法每个时钟周期也会发生一个成果。GPU体系结构可以并行发生一切浮点乘法,可是不能高效的并行进行加法。之所以这样是因为不同的内核有必要经过本地存储器传输数据,互相完结通讯,因而,不能灵敏的衔接FPGA体系结构。

这一办法发生的成果要比传统IEEE754浮点成果准确得多,如表3的丈量成果所示。BDTI的基准测验取得了类似的成果。

4.6.jpg

表3:FPGA相关于IEEE754浮点更准确的成果。

运用Cholesky分化算法,完结大规划矩阵求逆,取得了表3的成果。以三种不同的办法完结了相同的算法——在Matlab/Simulink中,运用了IEEE754单精度浮点,在RTL单精度浮点处理中,运用交融数据通路办法,在Matlab中也运用了双精度浮点。双精度完结要比单精度完结精度高十亿倍(109)。

表3比照了Matlab单精度;RTL单精度和Matlab双精度存在差错,确认了交融数据通路办法的完整性。选用了这一办法来取得输出矩阵中一切复数元素的归一化差错以及矩阵元素的最大差错。运用Frobenius范数核算了总差错和范数:

4.7.jpg

请留意,因为范数包含了一切元素的差错,因而,它要比每一差错大许多。

并且,DSP Builder高档模块库和OpenCL东西流程都针对下一代FPGA体系结构,支撑并优化现在的规划。因为体系结构立异和工艺技能立异,功用可以到达100峰值GFLOPs/W。

总结

高功用核算运用现在有新的处理渠道挑选。关于特别类型的浮点算法,FPGA可以供给低延时和较高的GFLOP/s。在简直一切运用中,FPGA都可以完结优异的每瓦GFLOP/s。跟着下一代高功用核算优化FPGA的推出,这种优势会更显着。

Altera的OpenCL编译器为GPU编程人员供给了简直无缝的办法来评价这一新处理体系结构的目标。Altera OpenCL契合1.2标准,供给全面的数据库支撑。它处理了传统FPGA遇到的时序收敛、DDR存储器办理以及PCIe主处理器接口等难题。

关于非GPU开发人员,Altera供给DSP Builder高档模块库东西流程,支撑开发人员开发高Fmax定点或许浮点DSP规划,一起坚持了根据Mathworks的仿真和开发环境的长处。要求高效能作业流程的FPGA开发人员多年以来一向运用这一产品,与经验丰富的FPGA开发人员比较,所完结的Fmax功用相同。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/288784.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部