代码之家  ›  专栏  ›  技术社区  ›  PDiracDelta

我应该使用def、cdef或cpdef定义Cython函数以获得最佳性能吗?

  •  11
  • PDiracDelta  · 技术社区  · 6 年前

    假设我想要最佳性能,那么在定义Cython函数时,我如何知道是使用def、cdef还是cpdef?

    1 回复  |  直到 6 年前
        1
  •  24
  •   DavidW    2 年前

    如果希望获得最佳性能,您应该知道 this answer 相关问题:

    一旦调用了函数,则 cdef 和a def 函数运行于。

    因此,为了获得最佳Cython性能,您应该 始终静态键入所有参数和变量 ,直觉上,你会很想使用 cdef公司 ,但我构建了以下流程图,其中有一些注意事项(也是基于前面提到的答案):

    def, cdef, cpdef flowchart

    此外,请注意:

    cpdef 函数使Cython生成 cdef公司 函数(允许Cython快速调用函数)和 def公司 函数(它允许您从Python调用它)。内部 def公司 函数只调用 cdef公司 作用

    。。。从Cython文档中:

    这将利用早期绑定,以便 cpdef 使用C基本类型时,函数可能会尽可能快(通过使用 cdef公司 )。 cpdef 函数在传递Python对象时使用动态绑定,这可能会慢得多,可能与 def公司 声明的函数。

    还有一个 case-specific benchmark (经常调用函数并从Python中调用)这将产生以下结果:

    enter image description here

    推荐文章