我感到困惑,哪个更好。 我知道在两者中编写代码但是我没有得到任何处理器的更好。请告诉我同样的原因。
答案 0 :(得分:3)
正如保罗在评论中所说,你的需求和期望表明:
通常从内在函数开始,然后只在需要时才转到asm 进一步优化。对于x86,PowerPC等,这很少见 必要的,但ARM / Neon的编译器并不是那么好,你可以 如果您的代码足够,那么必须求助于汇编 性能关键
Intrinsics是大多数编译器的一部分,您可以使用它们来满足您的性能要求。内在函数比内联汇编或纯汇编更简单。如果您打算使用C或C ++等高级语言,我建议不要使用内联汇编。根据我的经验,ICC,GCC和Clang无法优化内联装配,或者如果优化它会很小。当你想为像x86这样的特定架构进行编码时,内在函数很好,并为不同的微架构重新编译它。正如彼得在评论中所说:
能够使用不同的
-mtune=haswell
或重新编译代码-mtune=znver1
选项
Intrinsics也是优化器的挑战,但不像内联汇编。例如,如果编译用C和Intrinsics编写的代码,则性能可能没有差别,但是,您启用了编译器优化。在我的测试中,大多数O3
,自动向量被禁用,O2
获得内在函数相同的性能,而标量代码中的相同方法显示完全不同的性能(不是自动矢量化,而是其他优化)。在this paper中,您可以看到内联汇编的评估和矩阵 - 矩阵乘法的内在函数。此外,内在函数不可移植,需要将来维护等。我发现new interface声称它与Intrinsics相比没有失去性能。