0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浮点处理器相对于定点处理器有何不同

电子设计 来源:互联网 作者:佚名 2018-03-07 08:57 次阅读

C28x+FPU架构的C2000微处理器在原有的C28x定点CPU的基础上加入了一些寄存器和指令,来支持IEEE 单精度浮点数的运算。对于在定点微处理器上编写的程序,浮点C2000也完全兼容,不需要对程序做出改动。浮点处理器相对于定点处理器有如下好处:

编程更简单

性能更优,比如除法,开方,FFT和IIR滤波等算法运算效率更高。

程序鲁棒性更强。

一、IEEE754格式的浮点数

C28x+FPU的单精度浮点数遵循IEEE754格式。它包括:

尾数

表1:IEEE单精度浮点数


(1)非规格化数值非常小,计算公式为(-1)sx2(E-126)x0.M

(2)正常范围数值计算公式为(-1)sx2(E-127)x1.M

正常范围数值落在± ~1.7 x 10 -38 to ± ~3.4 x 10 +38范围内。从表1可以看出,IEEE754标准包括:

标准数据格式和特殊值,比如非数值(NaN)和无穷大

标准舍入模式和浮点运算

多平台支持,包括德州仪器C67x系列芯片

C2000对该标准作了一些简化:

状态标志位和比较运算不区分正0和负0

非规格化数值被认为是0

对非数值(NaN)处理方式和无穷大一样。

IEEE754标准有5种舍入模式,C28x+FPU只支持其中两种:

--截断:小数位不管大小全部舍去

--就近舍入向偶舍入:这种模式下如果小数位小于5就舍去,大于5就进位,如果小数位为5,则舍入到最近的偶数。

表2展示了不同的舍入模式对数据的影响。C28x+FPU编译器默认将微处理器配置为就近舍入向偶舍入模式[1]。

表2:不同舍入模式示例


  

二、浮点C2000芯片运算技巧和注意点

浮点数的精度由尾数位决定,绝大多数的数在用浮点数表示时都会有误差,这些误差很小,多数情况下可以忽略,但是在经过多次计算后这个误差可能会大到无法接受。

下面用实例来进行说明,下面一段代码定义float类型变量,分别在TI最新的Delfino芯片F28379D的CPU1和CLA1上,将11.7加20001次。

float CLATMPDATA=0;

int index=20001;

while(index--)

{

CLATMPDATA=CLATMPDATA+11.7;

}

得到如下结果:

其中CLATMPDATA1是在CLA中将11.7加20001次得到的结果,CLATMPDATA2是在CPU中将11.7加20001次得到的结果。可以看出两者所得到的结果不同,并且都和正确结果234011.7有较大差距。

为何CPU和CLA计算结果不同?

CPU和CLA运算结果的不同是由于其对浮点数的舍入模式的不同造成的,前文已经说过,C28x+FPU 编译器默认将CPU配置为就近舍入向偶舍入模式。而CLA不同,CLA默认为截断舍入模式[2]。在CLA的代码中,我们可以通过增加下述代码:

__asm(" MSETFLG RNDF32=1");//1为就近舍入向偶舍入,0为截断舍入

将CLA的舍入模式更改为就近舍入向偶舍入模式,然后再运行代码,可以得到和CPU同样的结果。

2. 为何CPU和CLA计算结果都有较大误差?如何解决?

11.7在用IEEE754格式的浮点数表示时为0x413b3333,其对应的实际值为11.69999980926513671875,可以看出误差很小,但是经过多次累加多次舍入后得到的结果误差较大,对此,我们可以将CLATMPDATA定义为long double型变量(64位),再次运行相同的代码,可以得到如下结果,可以看到误差很小可以忽略。

需要指出的是,现有的C28x CPU只支持单精度(32位)的硬件浮点运算,对于64位双精度浮点数的运算都是通过软件实现的,所以其运算速率会慢很多。另外CLA不支持64位数。

在这个实例中,我们可以分别观察float类型变量和long double类型变量的汇编代码如下:

C code: CLATMPDATA2=CLATMPDATA2+11.7;

如果CLATMPDATA2是float型变量,则相应的汇编代码为:

00c08d: E80209D8 MOVIZ R0, #0x413b 1cycle

00c08f: E2AF0112 MOV32 R1H, @0x12, UNCF 1cycle

00c091: E8099998 MOVXI R0H, #0x3333 1cycle

00c093: E7100040 ADDF32 R0H, R0H, R1H 2cycle

00c095: 7700 NOP 1cycle

00c096: E2030012 MOV32 @0x12, R0H 1cycle

如果CLATMPDATA2是long double型变量,则相应的汇编代码为:

00c08b: 7680005A MOVL XAR6, #0x00005a 1cycle

00c08d: 8F00005A MOVL XAR4, #0x00005a 1cycle

00c08f: 8F40C26A MOVL XAR5, #0x00c26a 1cycle

00c091: FF69 SPM #0 1cycle

00c092: 7640C0C9 LCR FD$$ADD 4cycle(跳转耗时)

+25cycle(FD$$ADD函数内部需要25cycle)

可以看出CPU对float类型数执行一次加法耗时7个cycle,对long double类型数执行一次加法耗时33个cycle。

三、结论

1. C2000的CPU和CLA默认的舍入模式不同,在计算浮点数时可能会得到不同的结果,但是我们可以通过代码改变其舍入模式得到相同的结果。

2. 单精度浮点数经过多次计算后可能会有较大误差,可以通过将变量定义为64位long double型解决精度问题。

3. C28x CPU只支持单精度(32位)的硬件浮点运算,对于64位双精度浮点数的运算都是通过软件实现的,所以其运算速率会慢很多。在下一代的C2000产品中我们会实现对64位双精度浮点数运算的硬件支持。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10437

    浏览量

    206527
  • 微处理器
    +关注

    关注

    11

    文章

    2131

    浏览量

    81400
  • C2000 c
    +关注

    关注

    0

    文章

    3

    浏览量

    10218
收藏 人收藏

    评论

    相关推荐

    [4.3.1]--处理器的复位与启动

    处理器
    jf_90840116
    发布于 :2022年12月15日 16:06:36

    用FPGA 嵌入式处理器实现高性能浮点元算

    APU 接口与处理器的紧密结合可让浮点运算单元直接执行原生 PowerPC 浮点指令,这相对软件仿真而言,速度一般可提高 6 倍。除少数情况外,赛灵思 PowerPC FPU 一般符
    发表于 08-03 11:15

    ADI SHARC处理器哪些应用案例

    SHARC®处理器系列在浮点DSP市场占据主导地位,拥有出色的内核和存储性能以及优异的I/O吞吐能力。SHARC处理器浮点
    发表于 10-31 09:21

    请问定点处理器处理浮点数精度多高?

    最近接触到了DSP处理器,关于定点处理器处理浮点运算两个疑问,我是用C语言开发的,16位
    发表于 05-13 01:09

    什么是ARM处理器 ARM处理器哪些系列

    和 Intel 的 Xscale。其中,ARM7、ARM9、ARM9E 和 ARM10E 为 4 个通用 处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。例如, SecurCore 系列专门为安全要求较高的应用而设计。
    发表于 09-24 17:47

    SHARC处理器是什么?

    “SHARC”是超级哈佛架构(Super Harvard ARChitecture)的缩写,是ADI公司为他们的浮点处理器起的名字。
    发表于 03-12 09:00

    dsp33EP256mu810是定点处理器还是浮点处理器

    我怎么知道?我想做的网格接口PLL。我是否去FordSP33 EP256MU810系列?ISDSP33 EP256MU810是浮点处理器
    发表于 04-27 06:09

    什么是DSP,DSP处理器什么特点?

    常量、表格。如:正弦表等。3、16位、32位、64位的DSP处理器。4、某些型号的DSP处理器支持硬件浮点运算单元。5、可以使用厂家提供的算法库。6、某些型号的DSP
    发表于 09-04 10:31

    机器学习处理器单元支持浮点的乘加运算

    。  Achronix为了解决这一大困境,创新地设计了机器学习处理器(MLP)单元,不仅支持浮点的乘加运算,还可以支持对多种定浮点数格式进行拆分。
    发表于 11-26 06:42

    CPU处理器的相关资料分享

    CPU处理器基于TI KeyStone C66x多核定点/浮点DSPTMS320C6678+ Xilinx Kintex-7FPGA的高性能信号处理器,TI TMS320C6678集成
    发表于 12-28 07:43

    定点处理器浮点处理器的选择

    浮点处理器的优点众所周知。毫无疑问,许多算法的浮点实现执行起来比定点代码占用更少的周期(当然,假设定点代码提供相同的精度)。
    发表于 08-25 17:31 0次下载

    SHARC处理器满足一高二低的浮点设计需求

    DSP的比较优势是浮点算法拥趸者们在浮点定点之争的话题中常提及的,也为大多数嵌入式设计工程师所熟知。 然而,由于电路复杂性和制造工艺上的原因,浮点处理器
    发表于 11-02 11:26 0次下载
    SHARC<b class='flag-5'>处理器</b>满足一高二低的<b class='flag-5'>浮点</b>设计需求

    让新型SHARC处理器满足“一高二低”的浮点设计需求

    DSP的比较优势是浮点算法拥趸者们在浮点定点之争的话题中常提及的,也为大多数嵌入式设计工程师所熟知。 然而,由于电路复杂性和制造工艺上的原因,浮点处理器
    发表于 11-02 11:46 0次下载
    让新型SHARC<b class='flag-5'>处理器</b>满足“一高二低”的<b class='flag-5'>浮点</b>设计需求

    FPGA简单入门和逻辑块与相对于处理器的并行操作

    4分钟的FPGA简单入门介绍,主要介绍了逻辑块、相对于处理器的并行操作。搬运于YouTube,字幕自制。
    的头像 发表于 08-29 06:05 2375次阅读

    C2000浮点运算注意事项:CPU和CLA的差异及误差处理技巧

    C28x+FPU架构的C2000微处理器在原有的C28x定点CPU的基础上加入了一些寄存器和指令,来支持IEEE 单精度浮点数的运算。对于定点
    的头像 发表于 04-06 10:30 1392次阅读