微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 在FPGA上优化实现复数浮点计算

在FPGA上优化实现复数浮点计算

时间:06-02 来源:RF技术社区 点击:

的专用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

  图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个浮点加法器构成的加法树。这类实现需要很多桶形移位电路。

5

  图3:矢量点乘优化。

相反,可以对64个乘法器的输出进行去归一化,成为公共指数,最大是64位指数。可以使用定点加法器电路对这些64路输出求和,在加法树的最后进行最 终的归一化。如图3所示,这一本地模块浮点处理过程省掉了每一加法器所需要的临时归一化和去归一化。即使是IEEE754浮点,最大指数基本决定了最终的 指数,因此,这种改变只是在计算早期进行指数调整。

但是,进行信号处理时,在计算最后尽可

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top