我正在针对在两个图像(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
我预计-O2-march = barcelona要好一些,考虑到我运行的机器是AMD巴塞罗那。关于为什么-O2比-O2 -march更好的想法?
关于-ftree-vectorize,它应该能够并行运行指令,因为我的循环是无依赖的。但是,-02-ftree-vectorize-march = barcelona是最好的,当单独时间有合理的差异时。
如果我能理解这种行为,那将会很棒。
的问候,
萨扬