如何使用gcc编译代码和ARM Cortex A8目标进行调用图评测?

如何使用gcc编译代码和ARM Cortex A8目标进行调用图评测?,gcc,arm,stack-trace,oprofile,cortex-a8,Gcc,Arm,Stack Trace,Oprofile,Cortex A8,我在这件事上咬牙切齿 我需要在ARM板上进行评测,并需要查看调用图。我尝试使用OProfile、内核性能和Google性能工具。所有这些都可以正常工作,但不输出任何调用图信息 这让我得出结论,我没有正确编译代码 < >我编译C++代码时使用以下标志: 特定于拱门的: -march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3 概述: -fexceptions -fno-strict-aliasing -D_REENTRANT -Wa

我在这件事上咬牙切齿

我需要在ARM板上进行评测,并需要查看调用图。我尝试使用OProfile、内核性能和Google性能工具。所有这些都可以正常工作,但不输出任何调用图信息

这让我得出结论,我没有正确编译代码

< >我编译C++代码时使用以下标志:

特定于拱门的:

-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3
概述:

-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra
调试(带优化):

我在谷歌上做了很多搜索,找到了一些相关的主题:

  • libunwind
  • 矮子
  • (异步)展开表
  • -mapcs帧
然而,我并不完全理解这些是如何联系在一起的。有关于如何让调用图工作的提示吗


注意(根据Rian的回答):我很有兴趣了解一些方法在ARM上比x86-64花费的时间(相对于其他方法)是否更长,以及为什么更长。在不同的平台上执行此操作没有任何帮助(即使我的代码在这两个平台上都可以编译,我也可以在x86-64上执行调用图)。

我知道您希望在ARM cortex-A8上执行评测,但如果您对调用图感兴趣,为什么不为x86编译并运行valgrind的调用图工具,然后使用kcachegrind检查结果

两种体系结构之间的调用图应该相同,即使它们编译函数的方式略有不同,函数之间的关系也不应该改变

无需特别标志:

valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &

我对每个函数的累积时间(包括子负载)特别感兴趣,因此我可以看到某些使用模式可能会如何影响特定于平台的性能。这很难从一个平台转移到另一个平台,因为“每次调用链”关系会有所不同。但是你的回答对那些只想得到通话图而对时间不感兴趣的人来说是一个很好的建议+1确实要使用-mfloat abi=hard进行编译吗?据我所知,mfloat abi=softfp仍然使用NEON,但与现有的二进制文件更兼容,尽管它的性能不如mfloat abi=hard hard hard hard,但它应该提高性能,我们使用hard.oprofile构建整个发行版取决于内核。您是否重新配置了内核以便于进行分析?您最终成功地使其工作了吗?我遇到了完全相同的问题。不-当时我们放弃了,采取了反复试验:(
valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &