资料介绍
有很多种算法可对单精度浮点数字的正弦值进行计算,但添加硬件加速器是功能最为强大的方法之一。之所以得出这一结论,是因为客户的应用要求使用此类正弦计算,而我们又针对能够提供良好、快速且高效的解决方案进行了多种方案的探索。
为了确定哪种实现方式最适合您的应用,首先需要对代码进行分析,以查找哪种功能需要改进;其次,由于修改软件比修改硬件更简便、迅速,因而请检查是否能通过修改软件来实现您所需的高速度(有时可以)。但是如果您还需要更高的性能,那么请考虑在硬件中实现部分算法。在硬件加速的支持下,您可以轻松胜过市场上任意或DSP。
为了解该流程,让我们以现实案例为例,探讨如何开发一个需要针对单精度浮点数字进行正弦计算的军事应用。出于对高性价比的原因考虑,客户已选择了一款采用嵌入式 MicroBlaze®的Spartan®-6 FPGA 作为主系统控制器。可处理正弦计算的软件算法应运行于MicroBlaze 之上。
客户的算法主要使用浮点运算。由于算法复杂,转而采用定点运算并不妥当。此外,客户还希望避免使用定点运算时可能出现的运行过度或运行不足的情况。
客户清楚 MicroBlaze IP 可提供两种类型的浮点单元 (FPU),并已选用扩展版本(相对于基本版而言)来加速算法。但是,这样做就无法利用作为GNU工具链组成部分且随 EDK 一起交付的数学仿真库。数学库中的软件仿真例程程序运行速度非常慢,在任何情况下都应尽量避免将其用于算法中对性能起到关键作用的部分。
另外,客户还清楚 MicroBlaze FPU的两个版本都只能处理单精度数据,不能处理双精度数据。客户的算法可以明确地仅使用浮点精度数据 (float precision data)。但在开始使用数学函数时,有时也会进行隐式转换。这些转换会强制算法
在不知不觉中使用双精度数据。
步骤一:分析问题
我们的客户已经在运行他的算法,但发现该算法在MicroBlaze处理器上的运行速度偏慢。在对代码库进行特性描述后,客户发现引起速度慢的原因是正弦计算。下一步是找出其中原因并分析怎样做才能加快处理速度。
第一种方案是使用数学库提供的标准正弦函数,在客户将算法写入后,在不进行任何修改的情况下完整地运行它。主要的问题在于数学库函数仅针对双精度数据而创建,这就意味着正弦函数的原型应为如下所示:
double sin(double angle);
但客户希望以下列方式使用:
float sin_val;
float angle;
...
sin_val = sin(angle);
当然,这也是可能的,而且C编译器会自动从参数角添加所需的转换,进行“双精度化”,并将函数调用的结果转回浮点值。这样通常还是由数学库函数来执行两个额外的转换函数,甚至是正弦计算。
切记,MicroBlaze的FPU为单精度版本,只能完成如下执行指令:
sin_val = (float)sin((double)angle);
由于数学库的正弦函数是双精度的,因而FPU无法完成正弦计算,故需要纯软件的解决方案。但缺点在于速度太慢,无法满足客户的需求。
我们验证了使用双精度数据进行正弦值的计算是执行缓慢的原因。首先我们使用下列代码,从我们的执行文件中直接创建汇编代码:
mb-objdump.exe -D executable.elf
>dump.txt
检查汇编代码时,我们发现了如下代码行:
brlid r15,-15832 // 4400d300
其作用是调用数学库以进行双精度正弦计算。然后,我们测量了利用数学库函数完成单次正弦计算所需的时间,约为 38,700个CPU周期。
对于特定的任务,可以使用专用单精度函数,如计算平方根:
float sqrt_f( float h);
使用专用函数可以避免单、双精度函数之间的转换,而且还可充分利用MicroBlaze FPU。
但遗憾的是,在FPU上没有用于处理正弦计算的专用函数。此时,我们开始开发多个版本的算法来加速正弦值的计算,以实现更高的性能。
步骤二:创建更好的软件算法
创建硬件加速器通常需要一段时间而且也需要进行调试,因而我们试图避免在第一次运行中就采取这种方案。我们就性能问题与客户进行了沟通,获得了正弦计算的关键参数。
客户的算法要求正弦计算的参数角应具有1%的精度,而且计算出的正弦值精度应比数学库函数调用的结果高0.1%。
这些属于关键参数,而且客户告知我们,他有时必须按顺序计算多个正弦值(比如在处理之前先填入小表格)。
由于对表格的尺寸要求, 使用填充了所有数值的查找表显然不太可能。条目的最小数量为360,000个浮点数值(每个值 4 个字节)。客户想找到高速解决方案,但在大小上也应该合适。我们建议的解决方案可使用下列等式:
sin(xi) with xi = x + d
得到:
sin(x+d) = sin(x)*cos(d) +cos(x)*sin(d)
在这里,d是一个始终小于 x最小可能值(大于0)的值。这种解决方案有什么优势呢?我们需要缩小表格的大小,但会带来计算量的增加。表格从开始就划分为四个表格:
cos(x)
sin(x)
cos(d)
sin(d)
图1和图2显示了所有4个表格所需的分辨率以及这些值通常情况下的表现。这些表格仅显示了16个值的条目,用于说明需要填入我们的查找表中的值。我们在我们最终的解决方案中所使用的值要多得多。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 话处理器基础知识 1次下载
- 基带处理器的一般设计原则资料下载
- NiOSⅡ处理器的Avalon总线架构资料下载
- 到底64位处理器和32位处理器有什么区别呢?资料下载
- “硬件软件化”,32位处理器的开发与8位处理器的开发资料下载
- 以单片机为核心处理器 无线解说器资料下载
- 详解微处理器和微控制器的区别资料下载
- 正弦波形的产生资料下载
- Cortex-M0处理器的故障处理和功耗管理资料下载
- Cortex-M0处理器的异常处理模型资料下载
- 为什么我的处理器漏电?资料下载
- 正弦波计算器应用程序免费下载 20次下载
- M3处理器的详细原理图资料免费下载 60次下载
- 如何使用TMS320C54X数字信号处理器产生正弦波的详细资料概述 15次下载
- 加速处理器的正弦函数计算步骤 22次下载
- 对称多处理器的特点是什么 1.6k次阅读
- 处理器的定义和种类 7.7k次阅读
- 简单认识MIPS架构处理器 3.6k次阅读
- 音频处理器怎么接线 1.6w次阅读
- 手机处理器与电脑处理器的差异分析 1.1w次阅读
- 4大主流CPU处理器的技术架构是怎么样的 1w次阅读
- 协处理器的介绍及应用 4.9k次阅读
- arm的协处理器有几个?ARM协处理器详解 9.7k次阅读
- 手机上的协处理器有什么作用_苹果协处理器是干什么的 2.3w次阅读
- 8086微处理器的组成与工作原理 1.4w次阅读
- HBase的协处理器开发编码实例 2.1k次阅读
- 协处理器是什么_intel协处理器有什么用 2.8w次阅读
- a11处理器规格_苹果a11处理器详细参数 7.4w次阅读
- 单片机、微控制器和微处理器有什么区别 2.2w次阅读
- 微处理器与微控制器的区别 7.1k次阅读
下载排行
本周
- 1ESU-1B-5130产品规格书
- 254.12 KB | 次下载 | 免费
- 2A-59U_具有USB功能的多模语音处理模块
- 2.51 MB | 次下载 | 免费
- 3AU-48双麦多功能语音处理模组
- 1.40 MB | 次下载 | 免费
- 4金手指智能斜边检查机-卓显科技
- 991.71 KB | 次下载 | 免费
- 5APS系列宽带低相噪频率综合器Datasheet
- 628.05 KB | 次下载 | 免费
- 6电感式编码器BE30B4的RS485协议内容
- 960.95 KB | 次下载 | 免费
- 7PN6775 超低待机功耗原边反馈交直流转换器规格书
- 0.73 MB | 次下载 | 免费
- 8WX-0813 集AI ENC,AEC,USB,双 5W 功放输出超强性能语音处理模组数据手册
- 0.92 MB | 次下载 | 免费
本月
- 1人形机器人执行、感知系统技术及市场解析
- 3.52 MB | 37次下载 | 免费
- 2瑞芯微RK3562开发板资料-飞凌嵌入式
- 2.80 MB | 2次下载 | 免费
- 3FS4054H 输入电压范围3.8V~6.8V 输入最大耐压28V 输入过压关闭充电阈值6.8V
- 4.22 MB | 2次下载 | 免费
- 4安川CH700变频器程序手册
- 6.60 MB | 1次下载 | 3 积分
- 5基于图书标签的RFID智慧图书馆详细解决方案
- 762.05 KB | 1次下载 | 免费
- 6AC/DC 225W 开板电源 LOF225-23BxxR2系列数据手册
- 2.70 MB | 1次下载 | 1 积分
- 7晶振技术解析---电子设备的“时钟心脏”
- 1.55 MB | 1次下载 | 免费
- 8光栅尺磁栅尺编码器流量计水电表单端或差分脉冲信号转RS485模块数据手册
- 1.81 MB | 次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935137次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233095次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191469次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183361次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81608次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73836次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65991次下载 | 10 积分
电子发烧友App





创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论