2015-03-25 137 views
3

我正在开发一些数值软件,它的性能很大程度上取决于数值精度(即浮点数,双精度等)。 我注意到ARM NEON并不完全符合IEEE754浮点标准。有没有办法在x86 CPU上模拟NEON的浮点精度?例如模拟NEON SIMD浮点运算的库。我可以在x86 C程序中模拟ARM NEON吗?

+0

http://meta.stackexchange.com/a/66378 – auselen 2015-03-25 08:06:15

+1

请注意,NEON _arithmetic_应该是单精度754 - “不符合”主要来自对754指定多个模式的某些方面具有固定值(舍入,异常陷印,非正常处理等)。如果精度比速度更重要,请考虑定位VFP而不是NEON。 – Notlikethat 2015-03-25 11:09:55

+0

NEON没有把非正常变为零吗?如果是这样,我相信在x86中有一个设置可以做到这一点。 – EOF 2015-03-25 11:32:59

回答

1

也许吧。

我对SSE不太了解,但是可以强制许多SSE模式的行为像NEON。这将取决于您的编译器和可用库,但请参阅Visual Studio FP unit control functions。这可能足够满足您的要求。

此外,您可以使用arm_neon.h标头确保您使用类似的内在函数来完成类似的操作。最后,如果你真的需要在这些边界条件下达到这个精度,你将需要一个好的测试套件来验证你是否按预期实现了你的结果。最后,即使使用纯粹的“C”代码(通常符合IEEE-754),并使用ARM上的VFP作为其他评论者所述,您将得到不同的结果,因为浮点非常不规则过程,并受到优化和操作顺序的突发事件的影响。让结果在不同的编译器中相匹配是非常具有挑战性的,更不用说硬件体系结构。例如,如果要在CL/MSVS上与/fp:precise进行比较,要在英特尔上使用gcc获得非常令人满意的结果,通常需要使用-ffloat-store标志。

最后,您可能需要接受某种非零容错。试图达到零可能是困难的,但如果你到达那里听到你的结果会很棒。看起来有可能......但很难。

0

感谢您的回答。

最后,我使用了连接到桌面的android手机,并且手机上正在运行某些功能。

相关问题