有没有办法避免谷歌性能工具列出文件为“??:?”,即无法找到哪个文件包含它报告的功能?如何确定哪个库包含被调用的函数?gperftools无法识别文件
$ env LD_PRELOAD="/usr/lib/libprofiler.so.0" \
CPUPROFILE=output.prof python script.py
$ google-pprof --text --files /usr/bin/python output.prof
Using local file /usr/bin/python.
Using local file output.prof.
Removing _L_unlock_13 from all stack traces.
Total: 433 samples
362 83.6% 83.6% 362 83.6% dtrsm_ ??:?
58 13.4% 97.0% 58 13.4% dgemm_ ??:?
1 0.2% 97.2% 1 0.2% PyDict_GetItem /.../Objects/dictobject.c
1 0.2% 97.5% 1 0.2% PyParser_AddToken /.../Parser/parser.c
...
我的目标是能够剖析C代码中,有许多编译的C扩展模块Python包。在上面的玩具示例中,我将如何跟踪定义“dtrsm_”的位置?如果有多个加载的库包含具有相同名称的函数,是否有任何方法可以告诉哪个版本被调用?
+1赞成一般原则,但分析本身很少是目的。通常目标是节省时间。由于您大概只能编辑您编写的代码,因此您需要知道的是在代码中查找加速的位置。例如,如果您调用'dgemm'超过您的需要,您可以尝试减少调用它。如果你使用的矩阵很小,那么一个专门的例程可能会节省时间。这就是为什么我在这个问题上有这么一个害虫,[* as here *](http://scicomp.stackexchange.com/a/2719/1262)。如果你能避免它,那么在lib例程中XYZ才是重要的。 –