2

我正在尝试针对在两个图像( 2000Hx3000W 和 6800Hx8500W )上执行 sobel 内核卷积的程序的几个编译器开关。有一些我无法解释的观察结果,以下是数据 - 编译器标志和以秒为单位的时间(请关注最后一列,因为它表示较大图像的 Y 轴上的卷积):

O2-march=barcelona                  0.1483326   0.833264    1.6018882   28.6711242
O2-ftree-vectorize                  0.1462104   0.847973    1.506708    26.628592
O2                                  0.1468406   0.8368156   1.5999718   20.61377564
O2-ftree-vectorize-march=barcelona  0.1441898   0.827366    1.4687354   15.2572644

考虑到我正在运行的机器是 AMD barcelona,我预计 -O2-march=barcelona 会稍微好一些。关于为什么 -O2 比 -O2 -march 更好的任何想法?

关于-ftree-vectorize,它应该能够并行运行指令,因为我的循环是无依赖的。但是,-O2-ftree-vectorize-march=barcelona 是最好的,当单独存在合理的时间差异时。

如果我能理解这种行为,那就太好了。

问候,
萨扬

4

0 回答 0