我应该使用def、cdef还是cpdef来定义我的Cython函数以获得最佳性能?

15

如果我想要最优的性能,我应该如何确定在定义Cython函数时使用def、cdef还是cpdef?

1个回答

28
如果您想要达到最佳性能,应该知道如此答案所述:
一旦函数被调用,在 cdef 和 def 函数内部运行的代码速度没有区别。
因此,为了实现最佳的Cython性能,您应该始终静态类型所有参数和变量,然后会有冲动使用 cdef,但是下面我构建了一个流程图以解释其中的一些注意事项(也基于前面提到的回答): def,cdef,cpdef 流程图 此外,请注意以下内容: cpdef 函数会导致Cython生成一个 cdef 函数(允许从Cython快速调用函数)和一个 def 函数(允许您从Python中调用)。内部地, def 函数只调用 cdef 函数。
而且根据Cython文档:
这利用了早期绑定,以便在使用C基本类型(使用 cdef )时, cpdef 函数可能尽可能地快。当传递Python对象时, cpdef 函数使用动态绑定,这可能会慢得多,甚至与声明的 def 函数一样慢。
还存在一个特定情况基准测试(经常从Python中调用函数),其结果如下图所示: 输入图像说明

给这个人一个奖牌 - Jotarata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接