SSE优化代码执行类似于普通版本

我想采取英特尔SSE的第一步,所以我按照这里发布的指南,区别在于我不是为Windows和C ++开发,而是为Linux和C开发(因此我不使用任何_aligned_malloc而是posix_memalign )。

我还实现了一种计算密集型方法,而没有使用SSE扩展。 令人惊讶的是,当我运行程序时,两段代码(一台SSE和一台没有)需要花费相同的时间来运行,通常是使用SSE的时间略高于另一段。

这是正常的吗? GCC是否可能已经使用SSE优化(也使用-O0选项)? 我也尝试过-mfpmath=387选项,但没办法,仍然是一样的。

对于浮点运算,您可能看不到SSE带来的巨大好处。 大多数现代x86 CPU都有两个FPU,因此SIMD与标量的双倍精度可能只有大约相同的速度,单一精度可能会让你在一天的时间内获得2倍的SIMD而不是标量。 但是对于整数运算,例如8位或16位的图像或音频处理,您仍然可以通过SSE获得实质性的好处。

GCC有一个非常好的内置代码矢量化器(iirc在-O0及以上开始),所以这意味着它将在任何地方使用SIMD以加速标量代码(它还会稍微优化SIMD代码)如果可能的话)。

很容易确认这确实发生在这里,只是反汇编输出(或者让gcc发出注释的asm文件)。