版权归原作者所有,如有侵权,请联系我们

[科普中国]-浮点处理器

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

浮点处理器是指计算机中用于处理浮点数运算的处理器,在大多数情况下,浮点处理器只是作为辅助处理器,完成中央处理器完成其无法执行或执行效率、效果低下的处理工作。在科学计算中,由于大部分计算都是浮点数运算,这时浮点处理器可以加快运算速度和提高系统执行效率,这时的浮点处理器一般也称作定制处理器。

浮点数定义浮点型简单讲就是实数的意思。浮点数在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。

浮点数用于表示非整数数值。它由3个域组成:符号、指数、尾数。这种表示方法能够极大拓展数值编码的范围,因此浮点数是处理实数的选择。利用处理器中集成的浮点运算单元(FPU),可以加快浮点运算的速度。浮点的一种替代方案是定点,定点的指数域采用固定形式。但是,如果在没有 FPU 的处理器上使用定点,尽管可以获得更快的运算速度,但数值范围和动态范围较小。因此,在使用定点方法时,开发人员必须仔细检查定点算法中的缩放比/饱和问题。C 语言为浮点运算提供 单精度和 双精度两种类型。matlab 或 scilab 等高级建模工具主要使用单精度或双精度浮点生成 C 代码。如果不支持浮点,则必须修改生成的代码,使其适合定点。同时,所有浮点运算代码都需要由程序员手动编写。在代码中使用原生浮点运算时,可有效缩短项目的开发时间。浮点运算是实现任何数学算法有效的方法。

浮点运算单元由于浮点运算适合两个数之间的任何运算,因此它需要非常多的资源。例如,我们需要:

对齐两个数值(使两个数值的指数相同) 执行运算;舍入结果;对结果进行编码。

在没有 FPU 的处理器上,这些运算全部由软件通过 C 编译器库完成,并且对程序员不可见;但这样做性能非常低。在有 FPU 的处理器上,对于大部分指令而言,所有运算都由硬件在单个周期内完成。C 编译器不使用其自身的浮点库,但会直接生成 FPU 原生指令。

在有 FPU 的处理器上执行数学算法时,程序员不必在性能和开发时间之间做出选择。利用FPU,可以通过 matlab 或 scilab 等高级工具直接可靠地使用任何生成的代码,同时确保实现性能。

标准在计算机科学领域,浮点运算已有多年的使用历史。早在上世纪三十年代末,德国的Konrad Zuse 开发 Z 系列计算机时,就已开始使用浮点运算。但是,由于支持浮点运算的硬件实现起来非常复杂,因此数十年来浮点运算一直没有得到广泛应用。上世纪五十年代中期,IBM 公司在其 704 大型机中引入 FPU;到七十年代,尽管已有多种平台支持浮点运算,但这些平台都采用自己的编码技术。1985 年,IEEE 发布了统一浮点运算的 754 标准,定义了支持浮点运算的通用方法。C 语言的浮点数类型 Float 和 Double 采纳了IEEE754 标准中所定义的单精度 32 位浮点数和双精度 64 位浮点数的格式1。

数值格式

所有值均由三个域组成:

符号:s

偏置指数:

— 指数之和 = e

— 常数值 = 偏置值

小数(或尾数):f

可以使用各种长度对值进行编码:

16 位:半精度格式

32 位:单精度格式

64 位:双精度格式

IEEE 定义了五类不同的数:

规格化数:标准浮点数

非规格化数:非规格化数用于表示过小而无法规格化的值(当指数为 0 时)。

零:零值加上符号用于表示饱和运算(正或负)。指数和小数均为空。

无穷大:无穷大值加上符号用于表示 +∞ 或 -∞。溢出或除以 0 时会产生无穷大值。指数设置为其最大

值,尾数为空。

NaN(非数字):NaN 用于表示不明确的运算结果,例如 0/0 或负数的平方根。指数设置为其最大值,尾数不为空。尾数的 MSB 用于判断该值是 QNaN(可通过后续运算传播)还是 SNaN(生成错误)。

舍入模式

该标准定义了以下四种主要舍入模式:

最近舍入

向 +∞ 舍入

向 -∞ 舍入

向 0 舍入

最近舍入是默认的舍入模式(最常用)。如果与两个最近值的距离相等,则选择 LSB 等于 0的值。舍入模式会改变算数运算的结果,因此非常重要。可以通过 FPU 配置寄存器更改舍入模式。

异常和异常处理

该标准支持 5 种异常:

无效运算:运算结果为 NaN

除以零

上溢:根据舍入模式,运算结果为 +/-∞ 或 +/-最大值

下溢:运算结果为非规格化数

结果不准确:由舍入所致

可用两种方式处理异常:

可以生成陷阱。陷阱处理程序会返回要使用的值来替代异常结果。

可以生成中断。中断处理程序不能返回要使用的值来替代异常结果。

协处理器为了提高计算机运算速度,用来弥补微处理器在数值计算方面不足的浮点运算部件2。是微处理器的一种。是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于CPU中的协处理器,同样不算是辅助处理器,除非它是独立存在。