C中的某些程序进行了广泛的浮点计算在PC Linux框上获得正确的结果,但是在单元处理器的SPE上进行了错误的结果,但在单元格的PPU上却没有。我正在使用GCC编译器。我想知道是否有一些GCC汇编选项可以增加舍入方法或类似方法,因此我以更精确的方式获得了单个浮点精度计算。我不能更改为两倍,因为SPE性能会大大降低

谢谢

有帮助吗?

解决方案

基于IBM SPU上IEEE 754的差异的文档, ,可能是任何数量的事情:

  • 算术操作的零结果始终为+0,从不-0。
  • 从2-149到2-126到算术操作的否定型输入被视为零具有相同的符号。算术操作永远不会产生变性结果,而是产生+0。
  • 算术操作不支持IEEE INF或NAN。这些位模式代表有效数字。溢出结果产生适当符号的最大幅度值。
  • 算术操作仅使用圆头到零(CHOP,截断)圆形模式,而不管浮点数状态和控制寄存器(FPSCR)的圆形模式的设置如何,这仅影响双精度算术操作。

当然,在相关页面上, 您也可以编译SPU代码,以实现严格的IEEE符合性:

默认情况下,XL C/C ++遵循大多数,但不是IEEE标准中的所有规则。如果您使用-Qnostrict选项编译,该选项默认是在优化级别-O3或更高的情况下启用的,则某些IEEE浮点数规则会以可以提高性能但可能影响程序正确性的方式违反。为了避免此问题,并要严格遵守IEEE标准,请执行以下操作:

  • 使用-QFLOAT = NOMAF编译器选项。
  • 如果程序在运行时更改圆形模式,请使用-QFLOAT = RRM选项。
  • 如果数据或程序代码包含信号NAN值(NAN),请使用-QFloat = NANS选项。 (信令NAN与安静的NAN不同;您必须将其明确编码到程序或数据中,或使用-Qinitauto编译器选项来创建它。)
  • 如果使用-O3,-O4或-O5编译,则在其后包含选项-Qstrict。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top