为什么GCC不显示向量化信息?

20

我正在使用Codeblocks在Windows 7上编写C程序。该程序使用OMP库。GCC版本为4.9.2。Mingw x86_64-w64-mingw32-gcc-4.9.2.exe。

使用的标志是: -fopenmp -O3 -mfpmath=sse -funroll-loops -ftree-loop-distribution -ftree-vectorize -ftree-vectorizer-verbose=2

程序可以正确运行,但问题是它没有显示有关循环向量化或未向量化的信息。我该怎么解决?

构建日志信息:

-------------- 在****中构建:发布 (编译器:GNU GCC Compiler)---------------

  

x86_64-w64-mingw32-gcc-4.9.2.exe-Wall-O2-march = corei7   -fexpensive-optimizations -O3 -fopenmp -mfpmath = sse -funroll-loops -ftree-loop-distribution -ftree-vectorize -ftree-vectorizer-verbose = 2 -c C:\ Users ... \ f.c -o obj \ Release \ f.o x86_64-w64-mingw32-g ++ .exe -o  bin \ Release \ d.exe obj \ Release \ f.o obj \ Release \ main.o -s  “C:\ Program Files ... \ libgomp-1.dll”  输出文件大小为21.00 KB的bin \ Release \ d.exe进程终止状态为0(0分钟,0秒)0个错误,0个警告(0分钟,0秒)

3个回答

33

CodeBlocks是一个IDE。它不编译任何东西。GCC才编译。在之前的版本中,-ftree-vectorizer-verbose曾经起作用。现在有了-fopt-info,可以检索关于优化(矢量化也是)的信息;您可以在此处找到相关文档。

甚至展示了如何实际检索矢量化器输出到stderr的方式: 以及这个:

gcc -O2 -ftree-vectorize -fopt-info-vec-missed 

打印有关向量化传递中错过的优化机会的信息到 stderr。请注意,-fopt-info-vec-missed 等效于 -fopt-info-missed-vec。

您可以根据列出的选项将“missed”更改为例如“optimized”,“all”等。


现在它可以工作了。在更改编译器之前,我有那种信息,然后我再也无法检索它们了。 - Franktrt
欢迎提供一个实现此功能的示例标志...fopt-info选项族的手册有点难以理解。 - Andrew Wagner
@AndrewWagner 我再次检查了文档,似乎自我回答后已经有所更改,因此我更新了链接并添加了更多的解释。 - edmz

5

1
在GCC-9.0.0中,消息现在以优化、未命中或注释为前缀,而不是所有消息都以注释为前缀的旧行为。 如果想要通过新的-内部子选项-fopt-info获取向量化器所做出的所有决策的详尽日志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接