有些使用C语言编写的程序在PC Linux上可以正确执行大量浮点计算,但在Cell处理器的SPE上却得出错误结果,而在PPU上却没有问题。我使用gcc编译器。我想知道是否有某种gcc编译选项可以增加舍入方法或类似操作,以便在单精度浮点数计算中获得更高的精度。由于SPE的性能会急剧降低,因此我无法改为双精度。
谢谢
有些使用C语言编写的程序在PC Linux上可以正确执行大量浮点计算,但在Cell处理器的SPE上却得出错误结果,而在PPU上却没有问题。我使用gcc编译器。我想知道是否有某种gcc编译选项可以增加舍入方法或类似操作,以便在单精度浮点数计算中获得更高的精度。由于SPE的性能会急剧降低,因此我无法改为双精度。
谢谢
基于IBM SPU与IEEE 754的差异文档,可能有以下几种情况:
当然,在相关页面上,您也可以编译SPU代码以严格遵守IEEE标准:
- 算术运算的零结果始终为+0,而不是-0。
- 来自2-149到2-126的非规格化输入在算术运算中被视为具有相同符号的零。算术运算永远不会产生非规格化结果,而是产生+0。
- 算术运算不支持IEEE Inf或NaN。这些位模式表示有效数字。溢出结果产生适当符号的最大幅值。
- 算术运算仅使用截断(chop,truncate)舍入模式,而不管浮点状态和控制寄存器(FPSCR)中舍入模式的设置如何,后者仅影响双精度算术运算。