如何分析 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 删除所有nogils 需要一些时间,但即使分析器未检测到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 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 cffi-lua 向/从 C 函数传递 Lua 表

如何在 cdef 中等待?

一些函数参数可以通过装饰器传递吗?

在cdef类中混合使用cdef和常规python属性

电脑cdef盘各是干啥的

不简单的python- 02函数类异常处理