如何分析 cdef 函数?
Posted
技术标签:
【中文标题】如何分析 cdef 函数?【英文标题】:How to profile a cdef function? 【发布时间】:2014-04-14 14:40:17 【问题描述】:我有一个使用许多 nogil
cdef
函数的应用程序,我想分析它们
为了找到瓶颈。
我尝试将 profile=True
指令传递给 Cython,但这些函数似乎是免疫的,因此 cProfile.run()
的输出包含调用 cdef
函数的函数的时间,但不包含 cdef
函数的时间自己。
是否有其他指令或分析器可用于分析 cdef
函数?
编辑:this is link to the application file that I am referring to...。为了配置文件,您必须设置:
#cython: profile=True
在标题处。
【问题讨论】:
为什么不能暂时删除nogil
?
@Veedrac 删除所有nogil
s 需要一些时间,但即使分析器未检测到cdef
函数...,它们对应的时间也包含在@987654333 中@函数调用它们
!.是否显示任何 Cython 函数?
@Veedrac 对上一条评论感到抱歉。你是对的,删除nogil
AND 设置#cython: profile=True
解决了问题并且cdef
函数出现在分析器中。如果您发布它,我很乐意接受您的回答...
【参考方案1】:
分析器需要gil
,因此,在@Veedrac 的cmets 的帮助下,解决方案是:
nogil
指令的cdef
函数
在.pyx
(or somewhere else) 的头部设置#cython: profile=True
这里的缺点是,通过删除nogil
,不能使用prange
来分析并行执行。还有一个问题……是否可以分析nogil
函数?
【讨论】:
以上是关于如何分析 cdef 函数?的主要内容,如果未能解决你的问题,请参考以下文章