我想采取英特尔SSE的第一步,所以我遵循发布的here指南,区别在于我不是为Windows和C ++开发,而是为Linux和C制作它(因此我不使用任何_aligned_malloc
但posix_memalign
)。
我还实现了一种计算密集型方法,而没有使用SSE扩展。令人惊讶的是,当我运行程序时,两段代码(一台SSE而另一台没有)需要花费相同的时间来运行,通常是使用SSE的时间略高于另一台。
这是正常的吗? GCC是否可以使用SSE优化(也使用-O0
选项)?我也尝试了-mfpmath=387
选项,但没办法,仍然是一样。
答案 0 :(得分:2)
对于浮点运算,您可能看不到SSE带来的巨大好处。大多数现代x86 CPU都有两个FPU,因此SIMD与标量的双倍精度可能只有大约相同的速度,单日精度可能会让你在一天的时间内获得2倍的SIMD而不是标量。但是对于整数运算,例如,在8位或16位的图像或音频处理,您仍然可以通过SSE获得实质性的好处。
答案 1 :(得分:1)
GCC有一个非常好的内置代码矢量化器(iirc在-O0及以上开始),所以这意味着它将在任何地方使用SIMD以加速标量代码(它还将优化SIMD)代码也有一点,如果可能的话。)
很容易确认这确实在这里发生了什么,只需反汇编输出(或者让gcc发出注释的asm文件)。