首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点数与定点数和性能

浮点数与定点数和性能
EN

Stack Overflow用户
提问于 2012-12-25 14:41:24
回答 2查看 917关注 0票数 2

我很好奇,在专用硬件上的浮点运算与在固定硬件上的浮点运算相比有多快。

有了固定点,假设你有一个数字555,你想要乘以1.54,你可以将555,154和100加载到寄存器中(三个时钟),再乘以154 (四个时钟),再除以100 (四个时钟),然后将输出寄存器加载到内存中(一个时钟)。

使用浮点数,您需要将值555和1.54加载到寄存器中(两个时钟),获得较大的缩放/指数(一个时钟),减去缩放(一个时钟),归一化一(乘法需要四个时钟),乘以(四个时钟),然后将输出寄存器保存到内存(一个时钟)。

12个时钟用于固定,13个时钟用于浮动。那么,我是不是遗漏了一些东西,并且有真正的性能优势,或者这一切都只是易于使用?我只是用了四个时钟进行乘法,显然它在所有处理器上不会是一样的,但它给出了一个大致的概念。

EN

回答 2

Stack Overflow用户

发布于 2012-12-25 15:36:28

使用固定点数1.54将会以适当的格式为您存储。然后你只需要做整数乘法,然后是常量加法,以补偿舍入误差,并进行一些筛选,以获得正确的基数。参见Wikipedia:Q number format

例如,假设Q15.16格式(整数为15位,小数为16位),您可以像这样执行乘法:

代码语言:javascript
复制
int32_t a = 555 * (1 << 16);  /* constant */
int32_t b = 1.54 * (1 << 16); /* constant, no calculations needed at run time */

int64_t temp = ((((int64_t) a) * b) + (1 << 15)) >> 16;
int32_t result = (int32_t) temp;

不需要除法或其他计算就可以将1.54转换为b (除非您需要从外部读取输入)。假设CPU有两个负载,即双精度乘法、常量加法(如果一次执行多次乘法,则已在寄存器中)和移位。

有了专用硬件(例如,DSP核或指令扩展),一些Qn.m类型将被直接支持,也是以矢量化的方式。虽然有了更高级别的CPU(现代英特尔或AMD),但我相信使用定点可能没有那么多好处,因为浮点指令已经非常有效。

票数 1
EN

Stack Overflow用户

发布于 2012-12-25 17:49:30

对于现代处理器,查看单个指令的性能并不是很有用。许多指令既是pipelined指令又是超标量指令,因此多条指令处于同时执行的不同阶段。

根据处理器规格和代码计算性能是极其困难的。我通常只会评估一个还不存在的处理器的性能。如果处理器和代码都存在,则更容易测量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14028346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档