有很多种算法可对单精度浮点数字的正弦值进行计算,但添加硬件加速器是功能最为强大的方法之一。之所以得出这一结论,是因为客户的应用要求使用此类正弦计算,而我们又针对能够提供良好、快速且高效的解决方案进行了多种方案的探索。
为了确定哪种实现方式最适合您的应用,首先需要对代码进行分析,以查找哪种功能需要改进;其次,由于修改软件比修改硬件更简便、迅速,因而请检查是否能通过修改软件来实现您所需的高速度(有时可以)。但是如果您还需要更高的性能,那么请考虑在硬件中实现部分算法。在硬件加速的支持下,您可以轻松胜过市场上任意微控制器或DSP。
为了解该流程,让我们以现实案例为例,探讨如何开发一个需要针对单精度浮点数字进行正弦计算的军事应用。出于对高性价比的原因考虑,客户已选择了一款采用嵌入式MicroBlaze的Spartan-6FPGA作为主控制器。可处理正弦计算的软件算法应运行于MicroBlaze之上。
客户的算法主要使用浮点运算。由于算法复杂,转而采用定点运算并不妥当。此外,客户还希望避免使用定点运算时可能出现的运行过度或运行不足的情况。
客户清楚MicroBlaze IP可提供两种类型的浮点单元(FPU),并已选用扩展版本(相对于基本版而言)来加速算法。但是,这样做就无法利用作为GNU工具链组成部分且随EDK一起交付的数学仿真库。数学库中的软件仿真例程程序运行速度非常慢,在任何情况下都应尽量避免将其用于算法中对性能起到关键作用的部分。
另外,客户还清楚MicroBlaze FPU的两个版本都只能处理单精度数据,不能处理双精度数据。客户的算法可以明确地仅使用浮点精度数据(float precision data)。但在开始使用数学函数时,有时也会进行隐式转换。这些转换会强制算法在不知不觉中使用双精度数据。
步骤一:分析问题
我们的客户已经在运行他的算法,但发现该算法在MicroBlaze处理器上的运行速度偏慢。在对代码库进行特性描述后,客户发现引起速度慢的原因是正弦计算。下一步是找出其中原因并分析怎样做才能加快处理速度。
作者:Karsten Trott 现场应用工程师 赛灵思(德国慕尼黑)公司