我可以在 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上运行。
我正在开发一些数值软件,其性能在很大程度上取决于数值精度(即浮点数、双精度等)。 我注意到 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上运行。