我正在咬我的牙齿...
我需要在ARM板上进行性能分析,并需要查看调用图。我尝试使用OProfile,内核性能和Google性能工具。一切正常,但不输出任何调用图信息。
这导致我得出的结论是我没有正确编译我的代码。
我在编译C ++代码时使用以下标志:
特定于拱门:
-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3
一般:
-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra
调试(优化):
-O2 -g -fno-omit-frame-pointer
我做了很多Google搜索,发现了一些相关主题:
libunwind?
矮人
(异步)展开表
-mapcs-frame
但是,我不完全理解它们之间是如何连接的。关于如何使调用图起作用的任何提示?
注意(由于Rian的回答):我感兴趣的是找出在ARM上某些方法是否(以及与其他方法相比)比x86-64花费更长的时间和原因。在另一个平台上执行此操作无济于事(即使我的代码在两个平台上都可以编译,并且我可以在x86-64上执行调用图)。
最佳答案
我知道您想在ARM cortex-A8上进行性能分析,但是如果您对调用图感兴趣,为什么不为x86编译并运行valgrind的callgrind工具并使用kcachegrind检查结果呢?
两种架构之间的调用图应该相同,即使它们对功能的编译稍有不同,功能之间的关系也不应改变。
无需特殊标志:
valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &