用GCC GPROF得到基本块频率

47 views
Skip to first unread message

Jianzhang Peng

unread,
Jan 7, 2010, 7:58:39 PM1/7/10
to hell...@googlegroups.com
一篇文章中说
“我们使用GPROF来剖析测试程序,并使用脚本处理得出各基本块的频率向指令选择算法提供各候选指令实例的频率”

我查看gprof的手册,新版本的GCC不支持用gprof统计基本块,而用gcov,而gcov。

-l
--line
The `-l' option enables line-by-line profiling, which causes histogram
hits to be charged to individual source code lines, instead of
functions. This feature only works with programs compiled by older
versions of the gcc compiler. Newer versions of gcc are designed to
work with the gcov tool instead.

我需要对优化的程序统计基本块频率。
GCC 4.x 中提供基本块统计吗?有人写过这样的patch吗?
谢谢
--
Jianzhang Peng

Paul Yuan

unread,
Jan 7, 2010, 8:18:45 PM1/7/10
to hell...@googlegroups.com
gcc -fprofile-generate/-fprofile-use

2010/1/8 Jianzhang Peng <pengji...@gmail.com>
--
您收到此邮件是因为您订阅了 Google 网上论坛的“HelloGcc Workshop”论坛。
要向此网上论坛发帖,请发送电子邮件至 hell...@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 hellogcc+u...@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/hellogcc?hl=zh-CN 访问此网上论坛。






--
Regards,
Paul Yuan (袁鹏)

Jianzhang Peng

unread,
Jan 8, 2010, 2:58:57 AM1/8/10
to hell...@googlegroups.com
gcov里面的基本块是source code级的概念,我想统计优化后的代码各基本块频率,
用 gcc -fprofile-generate/-fprofile-use 可以吗?

谢谢!


2010/1/8 Paul Yuan <yingbo.com
@gmail.com>:

--
Jianzhang Peng

Paul Yuan

unread,
Jan 8, 2010, 3:05:39 AM1/8/10
to hell...@googlegroups.com
可以. -fprofile-generate/-fprofile-use 就是为了获得基本块执行频率.

bb->count就可以得到基本块的执行频率.

2010/1/8 Jianzhang Peng <pengji...@gmail.com>

Jianzhang Peng

unread,
Jan 8, 2010, 3:15:08 AM1/8/10
to hell...@googlegroups.com
我用
gcc -fprofile-generate -O3 loop.c
./a.out
产生 loop.gcda

怎么解析这个文件呢,能不能发个例子

谢谢!!

2010/1/8 Paul Yuan <yingb...@gmail.com>:

Paul Yuan

unread,
Jan 8, 2010, 3:44:52 AM1/8/10
to hell...@googlegroups.com
gcc -fprofile-generate  -O3  loop.c
./a.out

使用选项-fprofile-use,gcc会在tree-profile这个pass读取gcda文件.dump出来就可以看到,不过最终的dump文件内容挺罗嗦的.

gcc -fprofile-use  -O3  loop.c -dfump-tree-tree_profile

也可以自己写代码在需要的时候读出这个值.

FOR_EACH_BB (bb)
  fprintf ("BB%d: " HOST_WIDEST_INT_PRINT_DEC "\n", bb->count);

2010/1/8 Jianzhang Peng <pengji...@gmail.com>
我用
gcc -fprofile-generate  -O3  loop.c
 ./a.out
产生 loop.gcda

怎么解析这个文件呢,能不能发个例子

谢谢!!

Paul Yuan

unread,
Jan 8, 2010, 3:55:34 AM1/8/10
to hell...@googlegroups.com
FOR_EACH_BB (bb)
  fprintf ("BB%d: " HOST_WIDEST_INT_PRINT_DEC "\n", bb->index, bb->count);

Jianzhang Peng

unread,
Jan 8, 2010, 4:09:58 AM1/8/10
to hell...@googlegroups.com
哦,理解了,谢谢


2010/1/8 Paul Yuan <yingb...@gmail.com>:


> FOR_EACH_BB (bb)
> fprintf ("BB%d: " HOST_WIDEST_INT_PRINT_DEC "\n", bb->index, bb->count);
>

> 2010/1/8 Paul Yuan <yingb...@gmail.com>


>>
>> gcc -fprofile-generate -O3 loop.c
>> ./a.out
>>
>> 使用选项-fprofile-use,gcc会在tree-profile这个pass读取gcda文件.dump出来就可以看到,不过最终的dump文件内容挺罗嗦的.
>> gcc -fprofile-use -O3 loop.c -dfump-tree-tree_profile
>> 也可以自己写代码在需要的时候读出这个值.
>> FOR_EACH_BB (bb)
>> fprintf ("BB%d: " HOST_WIDEST_INT_PRINT_DEC "\n", bb->count);
>>
>> 2010/1/8 Jianzhang Peng <pengji...@gmail.com>
>>>
>>> 我用
>>> gcc -fprofile-generate -O3 loop.c
>>> ./a.out
>>> 产生 loop.gcda
>>>
>>> 怎么解析这个文件呢,能不能发个例子
>>>
>>> 谢谢!!
>>>

>>> 2010/1/8 Paul Yuan <yingb...@gmail.com>:

Jianzhang Peng

unread,
Jan 8, 2010, 6:41:56 AM1/8/10
to hell...@googlegroups.com
在gimple pass能读取profile信息
那么程序的流图,基本块结构在后面的优化过程中应该没有变化?

2010/1/8 Jianzhang Peng <pengji...@gmail.com>:

--
Jianzhang Peng

Jianzhang Peng

unread,
Jan 8, 2010, 7:12:34 AM1/8/10
to hell...@googlegroups.com
不知道下面这两个选项的优化程度是不是一样
For example:
gcc -fprofile-generate -O3 foo.c -o foo

gcc -O3 foo.c -o bar

Dose "foo" and "bar" are equally optimized?


2010/1/8 Jianzhang Peng <pengji...@gmail.com>:

--
Jianzhang Peng

Paul Yuan

unread,
Jan 8, 2010, 7:54:07 AM1/8/10
to hell...@googlegroups.com
1)程序的流图,基本块结构在后面的优化过程中应该没有变化?
可能有.一些优化会改变控制流图,比如内联,循环展开,基本块重排等.

2)gcc  -fprofile-generate -O3和gcc   -O3  foo.c的优化程度是不一样的.
使用profile,比O3多early_inline(在profile前调用).

看优化选项调用了哪些pass:
gcc  -fprofile-generate -O3 -c -Q --help=optimizer
gcc  -O3 -c -Q --help=optimizer
gcc  -O2 -c -Q --help=optimizer

对比哪些enabled,哪些disabled.


2010/1/8 Jianzhang Peng <pengji...@gmail.com>
Reply all
Reply to author
Forward
0 new messages