SSE优化代码的性能与普通版本类似 我想用英特尔的SSE来开始我的第一步,所以我遵循了指南,区别在于,不是为了Windows和C++而开发的,而是为了Linux和C(因此我不使用任何

SSE优化代码的性能与普通版本类似 我想用英特尔的SSE来开始我的第一步,所以我遵循了指南,区别在于,不是为了Windows和C++而开发的,而是为了Linux和C(因此我不使用任何,c,gcc,x86,sse,simd,C,Gcc,X86,Sse,Simd,我还实现了一种计算密集型方法,没有使用SSE扩展。令人惊讶的是,当我运行程序时,两段代码(有SSE的代码和没有SSE的代码)的运行时间相似,通常是使用SSE的代码的运行时间略高于其他代码的运行时间 这正常吗?GCC是否可能已经使用SSE进行了优化(也使用-O0选项)?我还尝试了-mfpmath=387选项,但没有办法,仍然是一样的。GCC有一个非常好的内置代码矢量器(iirc在-O0和更高版本中启动),因此这意味着它将在任何地方使用SIMD,以加速标量代码(如果可能的话,它还将稍微优化SIMD代

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


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

GCC有一个非常好的内置代码矢量器(iirc在-O0和更高版本中启动),因此这意味着它将在任何地方使用SIMD,以加速标量代码(如果可能的话,它还将稍微优化SIMD代码)


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

对于浮点操作,您可能看不到SSE带来的巨大好处。大多数现代x86 CPU都有两个FPU,因此SIMD和scalar的双精度速度可能只有大致相同的速度,在好的一天,单精度可能会使SIMD的速度达到scalar的2倍。对于整数运算,例如8位或16位的图像或音频处理,使用SSE仍然可以获得巨大的好处。

您使用的是什么CPU?我使用的是Intel Core i7 M640 2.80GHzOK-请参阅下面的答案,你可能还想发布你的代码和用来构建它的命令行。我检查了汇编程序代码,我只看到了一对addps指令,我希望这段代码带有显式(至少)SSE。我怀疑自动矢量化在O0(无优化)时起作用,因为这是一个非常繁重的优化,应该只在O2或O3时启动。如果您查看gcc手册页,它会说
-ftree vectorize
-O3
设置。这在Debian/Ubuntu上,在其他平台上可能会有所不同。小心,
-O0
是0优化。优化从可能是原因的
-O1
开始。我将尝试一个单精度版本。好的-将代码和命令行添加到您的问题中-在开始使用SIMD时,有很多简单的事情可能会出错。Paul R,您是对的。使用32位整数的版本的加速比大约快2倍。我认为在16位和8位操作中,好处会更好。顺便说一下,我删除了整数版本中的平方根运算。谢谢。