如何对cdef函数进行分析?

2 投票
1 回答
730 浏览
提问于 2025-04-18 02:41

我有一个应用程序,里面用到了很多 nogilcdef 的函数,我想对它们进行性能分析,以找出瓶颈。

我尝试给 Cython 加上 profile=True 的指令,但这些函数似乎对这个指令无效,导致 cProfile.run() 的输出只显示了调用 cdef 函数的函数的执行时间,而没有显示 cdef 函数本身的执行时间。

有没有其他的指令或者性能分析工具可以用来分析 cdef 函数呢?


补充说明:这是我提到的应用程序文件的链接...。要进行性能分析,你必须在头部设置:

#cython: profile=True

1 个回答

1

这个性能分析工具需要用到 gil,所以在 @Veedrac 的评论帮助下,解决方案是:

  • 只使用 cdef 函数,不要加 nogil 指令
  • .pyx 文件的开头设置 #cython: profile=True或者其他地方

这样做的缺点是,去掉 nogil 后,就不能使用 prange 来分析并行执行的性能了。还有一个问题是……能不能分析 nogil 函数的性能呢?

撰写回答