我可以在 x86 C 程序中模拟 ARM NEON 吗?

Can I emulate ARM NEON in an x86 C program?

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

可能。

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

此外,您可以使用 arm_neon.h header 来确保您使用相似的内在函数来完成相似的事情。

最后,如果您确实需要在这些边界条件下达到这种精度,您将需要一个好的测试套件来验证您是否达到了预期的结果。

最后,即使使用通常符合 IEEE-754 的纯 "C" 代码,并像其他评论者提到的那样在 ARM 上使用 VFP,您也会得到不同的结果,因为浮点数是一个高度。 .. 不规则的过程,受优化和操作顺序的影响。获得在不同编译器之间匹配的结果具有挑战性,更不用说硬件架构了。例如,要使用 gcc 在 Intel 上获得高度认可的结果,通常需要使用 -ffloat-store 标志,如果您想在 CL/MSVS.

上与 /fp:precise 进行比较

最后,您可能需要接受某种 non-zero 容错。试图达到零可能很困难,但如果你达到零,听到你的结果会很棒。好像可以。。。但是很难。

感谢您的回答。

最后,我用了一个android phone连接到桌面,某些功能在phone上运行。