我有一个C ++程序,它是在gcc(gcc版本4.5.1)下使用-O3标志编译的。我正在考虑是否值得制作这个程序的SSE2版本(或者至少是最繁忙的程序)。但是,我担心编译器已经通过自动矢量化完成了这项工作。
问题:我如何确定(a)我的程序是否使用SSE / SSE2和(b)使用SSE / SSE2花费了多少时间(即分析)?
答案 0 :(得分:1)
判断您是否从编译器矢量化中获益的最简单方法是运行带有和不带-ftree-vectorize
标志的代码并比较结果。
-O3
会自动启用该选项。因此,您可能希望在-O2
下尝试使用它。
要查看哪些循环是矢量化的,哪些循环不是,为什么,您可以添加-ftree-vectorizer-verbose
选项。
当然,最后一个选项是查看程序集。在汇编中识别矢量化代码非常容易。