使用gprof的时间取样问题
我正在尝试使用GPROF介绍一些C ++代码,其中包含G ++,包括选项-PG.但是,尽管该程序在我的计算机上运行(最大化CPU)需要10-15分钟,但GPROF生产的表格的%时间,累计秒和自秒列完全为0.00!呼叫列包含正确的数据,例如,对基本功能的150,000多个调用.这是收集到的数据的示例: % cumulative self self total time seconds seconds calls Ts/call Ts/call name 0.00 0.00 0.00 156012 0.00 0.00 perm::operator[](int) const 0.00 0.00 0.00 153476 0.00 0.00 perm::perm(void) 该程序不使用字符串,唯一的#in
0 2023-12-05
编程技术问答社区
使用Eclipse时在Windows上对C代码进行剖析
我知道我可以在Linux上使用gprof和kprof概括我的代码. Windows上的这些应用程序是否有可比的替代方法? 解决方案 商业软件: 合理量化(昂贵,缓慢但非常详细) aqtime(较低,慢,有点详细) 免费软件: 很困( luke stackwalker( 这些商业替代方案通过"仪器"(添加说明)来更改编译的代码,并使用附加说明执行时间安排.这意味着它们会导致您的应用程序认真减慢. 这些免费的替代方案使用采样,这意味着它们的详细信息较少,但非常快.在实践中,我发现非常困扰的是非常好的,可以快速查看您的应用程序中的性能问题. 其他解决方案 有一个GPROF的mingw端口与Linux变体几乎相同.您可以获得完整的对于日食,有其他解决方案 是的,您可以配置代码 with Visual Studio
10 2023-12-05
编程技术问答社区
gprof报告没有累积时间
我正在尝试在运行OSX 10.5.7的计算机上使用GPROF配置C ++应用程序. 我以通常的方式使用G ++编译,但是使用-PG标志,运行应用程序并尝试使用GPROF查看呼叫图. 不幸的是,我的呼叫图包含所有时间列的所有零. "称为"列中的值具有合理的值,因此看起来像是介绍的,但我对缺乏其他数据感到惊讶. 我的所有源文件都以类似的方式编译: g++ -pg -O2 -DNDEBUG -I./ -ansi -c -o ScenarioLoader.o ScenarioLoader.cpp 然后,我运行'ar'将所有对象文件捆绑到库中. 后来,我链接并运行Gprof: g++ -pg -lm -o vrpalone vrpalone.o ../src/atomicprof.a lastbuild.o ./vrpalone gprof gmon.out | less 有什么想法? 解决方案 我想我可能会分享这个苹果邮件列表讨论我最近遇到的.
2 2023-11-08
编程技术问答社区
gprof产生空的输出
我正在运行Ubuntu 16.10,并尝试使用GPROF介绍程序.我使用flag -pg编译,并且该程序是单线程.实际的编译命令是: g++ -I. -std=c++11 -Wall -Wextra -O3 -pg -fPIC -Wno-unused-parameter -c -o build/obj/performance/stencil_application.o test/performance/stencil_application.cpp g++ -I. -std=c++11 -Wall -Wextra -O3 -pg -Wno-unused-parameter build/obj/performance/stencil_application.o -o build/test/performance/stencil_application 当我运行它时,程序需要几秒钟才能完成,并产生了一个名为gmon.out的文件.但是,当我运行gprof ./build/test/
0 2023-11-01
编程技术问答社区
-no-pie的用途是什么?
我正在使用GPROF在Ubuntu 17.10上使用C文件进行一些测试,当我使用GPROF执行生成的文件(gmon.out),与-pg选项编译和链接时,我得到了一个空的公寓并调用图形. 但是,我发现这是一个GCC错误,我必须将文件与-no-pie选项链接. 编译: gcc -c main.c file-1.c file-2.c -pg [-no-pie] 链接: gcc -o test main.o file-1.o file-2.o -pg [-no-pie] 我有GCC 7.2版本. 此选项如何工作,为什么如果我不使用该选项,为什么图形为空? 解决方案 该标志告诉海湾合作杂志不要做
0 2023-10-17
编程技术问答社区
计算序列可能性的更快方法?
这是我以前的第二个问题 更快地做多维矩阵的方法? 在遵循@Peter Cordes的建议后,我将代码矢量化,现在速度上升了50倍.然后,我再次进行了GPROF,发现此功能大部分时间都在使用. Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls Ts/call Ts/call name 69.97 1.53 1.53 cal_score(int, std::string, int const*, int, double) double cal_score(int l, string seq, const int *__restrict__ pw,int cluster,doub
8 2023-10-02
编程技术问答社区
带有std::priority_queue的Min heap是我的瓶颈。
替代标题: 与std::priority_queue更快的东西实现最小堆. grpof给了我: 时间秒秒呼叫S/呼叫S/呼叫名称 84.12 105.54 105.54 320000 0.00 0.00 _ZN3RKDI24Division_Euclidean_spaceIfEE2nnEjRKSt6vectorIfSaIfEERKfRS3_ISt4pairIfiESaISB_EERiiPjRSt14priority_queueISt5tupleIJfiiEES3_ISJ_SaISJ_EESt7greaterISJ_EES9_RKjS7_S7_i 我认为这是我唯一在项目中使用的std::priority_queue. " distry_euclidean_space"部分使我感到困惑,因为它是我项目中不再使用的类/文件. 这是我确切使用的: /** * Min_heap is actually a std::priority_queue, * wi
20 2023-09-30
编程技术问答社区
用std::priority_queue推入min heap是瓶颈。
比std::priority_queue更快的东西? 最初的问题是在这里.您可以通过/** * Min_heap is actually a std::priority_queue, * with std::greater as a parameter. */ typedef std::priority_queue, std::vector >, std::greater > > Min_heap; ... void nn(..) { // the core function of my project if(...) { branch.push(std::make_tuple(new_dist, other_child_i, tree_i)); } } 似乎是我项目的瓶颈(i think ),正如我在调用此事
20 2023-09-30
编程技术问答社区
在套接字中使用gprof
我有一个我想与Gprof一起介绍的程序.问题(似乎)是它使用插座.所以我得到这样的东西: ::select(): Interrupted system call 我不久前就解决了这个问题,放弃了,然后继续前进.但是,如果可能的话,我真的希望能够使用GPROF概括我的代码.我能做些什么?我缺少Gprof选项吗?插座选项?在存在这些类型的系统调用的情况下,GPROF是否完全没有用?如果是这样,是否有可行的替代方案? 编辑:平台: Linux 2.6(x64) GCC 4.4.1 gprof 2.19 解决方案 套筒代码需要处理中断的系统调用不管profiler,但在Profiler下,它是不可避免的.这意味着具有类似的代码. if ( errno == EINTR ) { ... 每个系统呼叫后. 看看,例如,在这里对于背景. 其他解决方案 gprof (这里该论文)是可靠的,但是它只打算衡量变化,即使为此,它也只能衡量CPU结合的问
0 2023-09-06
编程技术问答社区
如何在用SCons构建的程序中内置gprof支持?
问候, 这是我的Sconstruct文件: env = Environment() env.Append(CCFLAGS=['-g','-pg']) env.Program(target='program1', source= ['program1.c']) 这也是汇编的输出: scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... gcc -o program1.o -c -g -pg program1.c gcc -o program1 program1.o scons: done building targets. 您可以看到我将" -pg"选项传递给构建环境.构建后,我运行该程序以生成" gmon.out",但没有产生. 谁能确认这个问题?或有解决方案? 谢谢. 更新: 感谢此处给出的
26 2023-08-22
编程技术问答社区
在pthreads中使用gprof
Gprof可以用于介绍使用Pthreads的多线程程序吗?也就是说,其输出是否包括所有线程中使用的时间? 解决方案 是的,在描述的解决方法的帮助下/a>. 其他解决方案 您是否考虑过 pstack ?它可以与多个线程一起使用,并且可以通过Stackshot方法找到性能问题. 做得更好.
12 2023-06-18
编程技术问答社区
如何比较几个Gprof分析器报告?
在具有不同参数值的C程序的多次运行中,我获得了多个分析报告文件.这太难阅读和比较. 有没有一种方法可以得到一个比较文件,最好与图形显示,随着大小的大小(我在运行时我要传递的参数)如何增加或降低. 解决方案 尝试perf(1)工具. perf record ./yourbinary perf record ./yourbinary-v2 perf diff 在制作二进制文件时,请在试图理解为什么与该版本具有性能差异时会有所帮助. ,通常会有所帮助.
8 2023-06-16
编程技术问答社区
使用GPROF实现C程序的自动化处理
我使用GPROF分析了矩阵乘法C程序.该C程序具有这样的一般结构; int main() { int n; printf("enter size of square matrices"); scanf("%d", &n); data(matM); //fill matrices with n x n random data data(matN); // this is unoptimized algo matUnopt(int *matM, int *matN, int *MatOut, int size); // this is optimized algo matOpt(int *matM, int *matN, int *MatOut, int size); return(0); } 目前我的分析是: 我运行可执行的垫子,给出100的大小,然后给出 $ gprof mat gmon.out > analysis1.txt 此生成
4 2023-06-16
编程技术问答社区
如何对一个EXE和它同时加载的DLLs进行剖析?
我在Windows上使用MingW GCC编译器.如果我将-PG开关添加到编译器,则可以使用配置文件数据同时生成EXE和DLL. 生成了gmon.out.但是问题是当我使用 时 gprof myprogram.exe gmon.out 我没有配置文件输出(除了表标题和其他文本). gprof mydll.dll gmon.out 我仅获得该特定dll的输出,但没有为主exe. 也许EXE和DLL都希望生成相同的文件和DLL Won. 目标是在一个输出中获得EXE和DLL功能的统计数据. Gprof可以做到吗?如果没有,是否有任何工具可以在Windows上执行此操作? 解决方案 Gprof似乎无法做到这一点. Mingw中没有Sprof.所以滚动了我自己的剖面. 我使用了-finstrument-functions,因此分别在每个功能之前和之后都调用两个函数__cyg_profile_func_enter和__cyg_profile_
10 2023-06-16
编程技术问答社区
GNU gprof有漏洞吗?
我有一个C程序,该程序通过功能pi_calcPiBlock调用函数pi_calcPiItem() 600000000次.因此,要分析在功能上花费的时间,我使用了GNU GPROF.结果似乎是错误的,因为所有调用都归因于main().此外,呼叫图没有任何意义: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls Ts/call Ts/call name 61.29 9.28 9.28 pi_calcPiItem 15.85 11.68 2.40 pi_calcPiBlock 11.96 13.49 1.81
4 2023-06-16
编程技术问答社区
为什么gprof低估了总时间
我的CPU绑定过程可运行5个小时(使用getrusage()的CPU时间) 我试图通过Gprof对其进行介绍.总时间main()仅大约5000. 我的程序是CPU绑定的,它具有一些光盘IO,但并不重要.配置文件中断正在打开,我的过程中的过程不是多线程. 解决方案 它仅在它知道的例程中样本.您打电话new?那将花时间在gprof不去的地方. 顺便说一句,如果您正在寻找节省一些时间的方法(5小时后,我会) 您可以做得更好 .
8 2023-06-16
编程技术问答社区