如何确定我的程序是否使用 SSE2(通过 gcc 优化)?

发布于 2024-12-16 13:24:04 字数 238 浏览 0 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸢与 2024-12-23 13:24:04

判断您是否从编译器向量化中获得任何好处的最简单方法是运行带有和不带有 -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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文