2024-05-15 06:20:59 发布
网友
我开发了一个python C扩展,它从python接收数据并计算一些cpu密集型计算。 可以对C-分机进行侧写吗?
这里的问题是,用C编写一个要分析的样本测试会很有挑战性,因为代码依赖于特定的输入和数据结构(由python控制代码生成)。
你有什么建议吗?
使用gprof,您可以分析properly compiled和链接的任何程序(gcc -pg等,在gprof的情况下)。如果您使用的Python版本不是用gcc构建的(例如,PSF发布的Windows预编译版本),那么您需要研究该平台和工具链有哪些等效的工具(在Windows PSF的情况下,也许mingw可以提供帮助)。那里可能有“不相关”的数据(Python运行时中的内部C函数),如果有,由gprof显示的百分比可能不适用——但是绝对数(调用的次数和持续时间)仍然有效,您可以发布进程gprof的输出(例如,使用一个小Python脚本;-)排除不相关的数据并计算所需的百分比。
gcc -pg
gprof
gcc
mingw
我用google-perftools找到了方法。诀窍是在python中包装StartProfiler和StopProfiler函数(在我的例子中是通过cython)。
要分析C扩展,只需将python代码包装在StartProfiler和StopProfiler调用中。
from google_perftools_wrapped import StartProfiler, StopProfiler import c_extension # extension to profile c_extension.so StartProfiler("output.prof") ... calling the interesting functions from the C extension module ... StopProfiler()
然后,要分析示例,可以以callgrind格式导出,并在kcachegrind中查看结果:
pprof --callgrind c_extension.so output.prof > output.callgrind kcachegrind output.callgrind
在pygabriel的评论之后,我决定将一个包上传到pypi,该包使用谷歌perftools的cpu分析器实现python扩展的分析器:http://pypi.python.org/pypi/yep
使用gprof,您可以分析properly compiled和链接的任何程序(
gcc -pg
等,在gprof
的情况下)。如果您使用的Python版本不是用gcc
构建的(例如,PSF发布的Windows预编译版本),那么您需要研究该平台和工具链有哪些等效的工具(在Windows PSF的情况下,也许mingw
可以提供帮助)。那里可能有“不相关”的数据(Python运行时中的内部C函数),如果有,由gprof
显示的百分比可能不适用——但是绝对数(调用的次数和持续时间)仍然有效,您可以发布进程gprof
的输出(例如,使用一个小Python脚本;-)排除不相关的数据并计算所需的百分比。我用google-perftools找到了方法。诀窍是在python中包装StartProfiler和StopProfiler函数(在我的例子中是通过cython)。
要分析C扩展,只需将python代码包装在StartProfiler和StopProfiler调用中。
然后,要分析示例,可以以callgrind格式导出,并在kcachegrind中查看结果:
在pygabriel的评论之后,我决定将一个包上传到pypi,该包使用谷歌perftools的cpu分析器实现python扩展的分析器:http://pypi.python.org/pypi/yep
相关问题 更多 >
编程相关推荐