如何确定我的程序是否使用 SSE2(通过 gcc 优化)?
我有一个 C++ 程序,它是在 gcc(gcc 版本 4.5.1)下使用 -O3 标志编译的。我正在考虑是否值得制作该程序的 SSE2 版本(或者至少是其中最繁忙的版本)。但是,我担心编译器已经通过自动矢量化完成了这一点。
问题:我如何确定 (a) 我的程序是否正在使用 SSE/SSE2 以及 (b) 使用 SSE/SSE2 花费了多少时间(即分析)?
I have a C++ program which is compiled under gcc (gcc version 4.5.1) with the -O3 flag. I'm thinking about whether or not it would be worthwhile making an SSE2 version of this program (or at least, the busiest of it). However, I'm worried that the compiler has already done this through automatic vectorization.
Question: How do I determine (a) whether or not my program is using SSE/SSE2 and (b) how much time is spent using SSE/SSE2 (i.e. profiling)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
判断您是否从编译器向量化中获得任何好处的最简单方法是运行带有和不带有
-ftree-vectorize
标志的代码并比较结果。-O3
将自动启用该选项。因此,您可能想在-O2
下尝试。要查看哪些循环已矢量化、哪些循环未矢量化以及原因,您可以添加 -ftree-vectorizer-verbose 选项。
当然,最后一个选择是查看装配。在汇编中识别矢量化代码非常容易。
The easiest way to tell if you are gaining any benefit from compiler vectorization is to run the code with and without the
-ftree-vectorize
flag and compare the results.-O3
will automatically enable that option. So you might want to try it under-O2
instead.To see which loops were vectorized, which were not, and why, you can add the
-ftree-vectorizer-verbose
option.The last option, of course, is to look at the assembly. It's very easy to identify vectorized code in assembly.