有沒有辦法避免谷歌性能工具列出文件爲「??:?」,即無法找到哪個文件包含它報告的功能?如何確定哪個庫包含被調用的函數?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纔是重要的。 –