我想在英特尔的SSE上迈出我的第一步,所以我遵循了here发布的指南,不同的是,我不是为Windows和C++开发,而是为Linux和C开发(因此我不使用任何_aligned_malloc
,只使用posix_memalign
)。
我还在没有使用SSE扩展的情况下实现了一个计算密集型方法。令人惊讶的是,当我运行程序时,两段代码(有SSE的代码和没有SSE的代码)的运行时间相似,通常是使用SSE的代码略高于另一代码的时间。
这正常吗?有没有可能GCC已经用上交所进行了优化(也使用了-O0
选项)?我也尝试了-mfpmath=387
选项,但没有办法,仍然是一样的。
发布于 2011-08-11 00:18:54
对于浮点运算,您可能看不到SSE带来的巨大好处。大多数现代的x86 CPU都有两个FPU,所以双精度可能只有SIMD标量的速度相同,而单精度可能在好的情况下为SIMD提供标量的2倍。然而,对于整数运算,例如8位或16位的图像或音频处理,您仍然可以使用SSE获得实质性的好处。
发布于 2011-08-11 00:10:44
GCC有一个非常好的内置代码向量器( iirc在-O0和更高版本),所以这意味着它将在任何可能的地方使用SIMD来加速标量代码(如果可能的话,它也会对SIMD代码进行一些优化)。
很容易确认这就是这里发生的事情,只需反汇编输出(或者让gcc发出注释的asm文件)。
https://stackoverflow.com/questions/7014018
复制相似问题