lim*_*imi 12 performance sse simd
使用SIMD指令重写memcpy/memcmp/...在大型软件中是否有意义?
如果是这样,为什么gcc默认不为这些库函数生成simd指令.
此外,SIMD是否可以改进其他功能?
是的,使用SSE指令这些功能要快得多.如果您的运行时库/编译器instrinsics包含优化版本会很好,但这似乎并不普遍.
我有一个自定义的SIMD memchr
,它比库版本快得多.尤其是当我发现的第2个或3个字符(例如,我想知道是否有在这行文字的公式,我搜索第一的=
,\n
,\r
).
另一方面,库函数经过了很好的测试,所以如果你经常调用它们,它们只值得自己编写,而分析器显示它们占你CPU时间的很大一部分.
它没有任何意义。如果您的编译器能够发出 SIMD,则它应该为 memcpy/memcmp/类似的内在函数隐式发出这些指令。
您可能需要显式指示 GCC 发出 SSE 操作码,例如 -msse -msse2
; 某些 GCC 默认情况下不启用它们。另外,如果您不告诉 GCC 进行优化(即-o2
),它甚至不会尝试发出快速代码。
使用 SIMD 操作码进行此类内存工作可能会对性能产生巨大影响,因为它们还包括缓存预取和其他对于优化总线访问非常重要的 DMA 提示。但这并不意味着您需要手动发出它们;而是需要手动发出它们。尽管大多数编译器通常在发出 SIMD 操作方面表现不佳,但我使用过的每个编译器至少都可以处理基本 CRT 内存功能。
将编译器设置为 SSE 模式也可以使基本数学函数受益匪浅。只需告诉编译器使用 SSE 操作码而不是可怕的旧 x87 FPU,您就可以轻松获得 8 倍的加速。sqrt()