如何对cdef函数进行分析?
我有一个应用程序,里面用到了很多 nogil
和 cdef
的函数,我想对它们进行性能分析,以找出瓶颈。
我尝试给 Cython 加上 profile=True
的指令,但这些函数似乎对这个指令无效,导致 cProfile.run()
的输出只显示了调用 cdef
函数的函数的执行时间,而没有显示 cdef
函数本身的执行时间。
有没有其他的指令或者性能分析工具可以用来分析 cdef
函数呢?
补充说明:这是我提到的应用程序文件的链接...。要进行性能分析,你必须在头部设置:
#cython: profile=True
。
1 个回答
1
这个性能分析工具需要用到 gil
,所以在 @Veedrac 的评论帮助下,解决方案是:
- 只使用
cdef
函数,不要加nogil
指令 - 在
.pyx
文件的开头设置#cython: profile=True
(或者其他地方)
这样做的缺点是,去掉 nogil
后,就不能使用 prange
来分析并行执行的性能了。还有一个问题是……能不能分析 nogil
函数的性能呢?