如何确定我的程序是否使用SSE2(通过gcc优化)? 我有一个C++程序,它是在GCC(GCC版本4.5.1)下用-O3标志编译的。我在考虑是否值得制作这个程序的SSE2版本(或者至少是最繁忙的版本)。然而,我担心编译器已经通过自动矢量化完成了这项工作

如何确定我的程序是否使用SSE2(通过gcc优化)? 我有一个C++程序,它是在GCC(GCC版本4.5.1)下用-O3标志编译的。我在考虑是否值得制作这个程序的SSE2版本(或者至少是最繁忙的版本)。然而,我担心编译器已经通过自动矢量化完成了这项工作,gcc,sse,vectorization,Gcc,Sse,Vectorization,问题:我如何确定(a)我的程序是否使用SSE/SSE2和(b)使用SSE/SSE2花费了多少时间(即评测) 判断您是否从编译器矢量化中获得任何好处的最简单方法是运行带有和不带有-ftree vectorize标志的代码,并比较结果 -O3将自动启用该选项。因此,您可能希望改为在-O2下尝试 要查看哪些循环已矢量化,哪些未矢量化,以及原因,可以添加-ftree矢量化器verbose选项 当然,最后一个选择是查看部件。在汇编中很容易识别矢量化代码。请注意,即使没有矢量化代码,您也可能会看到一些SSE

问题:我如何确定(a)我的程序是否使用SSE/SSE2和(b)使用SSE/SSE2花费了多少时间(即评测)


判断您是否从编译器矢量化中获得任何好处的最简单方法是运行带有和不带有
-ftree vectorize
标志的代码,并比较结果

-O3
将自动启用该选项。因此,您可能希望改为在
-O2
下尝试

要查看哪些循环已矢量化,哪些未矢量化,以及原因,可以添加
-ftree矢量化器verbose
选项


当然,最后一个选择是查看部件。在汇编中很容易识别矢量化代码。

请注意,即使没有矢量化代码,您也可能会看到一些SSE代码,因为gcc倾向于使用SSE指令优化各种标量浮点操作(例如浮点转换)。