由另一个程序驱动的程序的gcc评测

由另一个程序驱动的程序的gcc评测,gcc,gprof,Gcc,Gprof,我有一个“大的预编译程序”,它调用一个Tcl脚本,它调用另一个(我的)C程序。试图澄清的是,场景如下所示: 大型预编译程序(BPP)--->Tcl脚本---->MyC程序(MCP) 我只想在MCP中运行评测,但它不能在独立模式下运行(即,它没有main功能) 当我编译MCP时,我使用了gcc中的-pg选项,但是当我运行BPP时,没有创建gmon.out。我应该用-pg搜索一种编译BPP的方法,还是有另一种方法 编辑: BPP内部应该有一个主循环。BPP在循环之前调用整个Tcl脚本进行初始化(更快

我有一个“大的预编译程序”,它调用一个Tcl脚本,它调用另一个(我的)C程序。试图澄清的是,场景如下所示:

大型预编译程序(BPP)--->Tcl脚本---->MyC程序(MCP)

我只想在MCP中运行评测,但它不能在独立模式下运行(即,它没有
main
功能)

当我编译MCP时,我使用了
gcc
中的
-pg
选项,但是当我运行BPP时,没有创建
gmon.out
。我应该用
-pg
搜索一种编译BPP的方法,还是有另一种方法

编辑:


BPP内部应该有一个主循环。BPP在循环之前调用整个Tcl脚本进行初始化(更快),但是在每次迭代中BPP只调用此脚本中定义的一个进程。同时,这个Tcl进程调用了我的MCP的主要功能。因此,我只想分析MCP,因为Tcl脚本不进行任何相关操作,它就像一个concenter。

如果MCP没有
main()
函数,它就不是一个真正的“程序”;根据定义,程序的某个地方有一个
main()
。因此,这表明MCP实际上是一个由Tcl加载的模块——某种共享库。此外,Tcl最初设计为嵌入到其他程序中,因此BPP可能包括Tcl解释器,然后Tcl解释器从MCP加载并运行代码。你需要澄清到底发生了什么,因为如果我的分析是正确的,你需要在Tcl或BPP中进行分析。是的,我认为你的解释是正确的。正如你所建议的,我将编辑我的问题以澄清这些要点。在GDB下自行运行MCP,然后运行。如果它在很短的时间内完成,那么添加一个临时的外部循环,这样它就可以运行足够长的时间来进行采样。你说的“在GDB下自行运行MCP”是什么意思?是否使用
-g
编译MCP并运行BPP?顺便说一句,这是一个非常聪明的评测方法!然而,我需要知道为什么基准从每次迭代0.5秒变为0.6秒。。。你认为贝叶斯方法会检测到差异吗?MCP有一个
main
功能,对吗?在命令行中键入
gdb-MCP
。键入
r
以运行它。当它运行类型^C来中断它时,
thread1
将它放在主线程上,
bt
获取回溯。看看它(有时人们不这么认为)。这样做10次。如果你可以注释掉X%堆栈上的任何一行代码,它的加速倍数大约为100/(100-X)。比如,如果这条线在60%的堆栈上,注释掉它会给你大约2.5倍的加速。也就是说,尽量避免打花费大量时间的电话。