SSE没有为C++数字运算提供加速

gos*_*old 1 c++ gcc sse x87

我有一个繁重的数字运算程序,可以进行图像处理.它主要是卷积.它是用C++编写的,用Mingw GCC 4.8.1编译.我在配备Intel Core i7 4900MQ(SSE高达SSE4.2和AVX2)的笔记本电脑上运行它.

当我告诉GCC使用SSE优化(使用-march = native -mfpmath = sse -msse2)时,与使用默认的x87 FPU相比,我看不到加速.

当我使用双打而不是浮动时,没有减速.

我的理解是,当使用浮动而不是双重时,SSE应该给我2倍的加速.我错了吗?

Mat*_*jek 5

我的理解是,当使用浮动而不是双重时,SSE应该给我2倍的加速.我错了吗?

是的,你是.

编译器和你的代码一样好 - 记住这一点.如果你没有考虑到矢量化设计你的算法,编译器是无能为力的.这并不容易:"打开开关,享受100%的性能提升".

首先,编译代码,-ftree-vectorizer-verbose=N看看编译器真正实现了什么.

N是详细级别,让它5看到所有可用的输出(更多信息可以在这里找到).

此外,您可能想要阅读有关GCC的矢量化器.

请记住,对于性能关键的代码段,使用SSE/AVX内在函数(这里有出色的文档)可能是最佳选择.