我知道调用另一个jitted函数的Numba-jitted函数会识别这个并自动使用快速C调用约定而不是通过
Python对象层,因此避免了高Python函数调用开销:
import numba
@numba.jit
def foo(x):
return x**2
@numba.jit
def bar(x):
return 4 * foo(x) # this will be a fast function call
我的问题是,如果我从Numba调用Cython函数,是否也是如此.所以假设我有一个Cython模块,foo.pyx:
cpdef double foo(double x):
return x**2
以及标准的Python模块bar.py:
import numba
import foo
@numba.jit
def bar(x):
return 4 * foo.foo(x) # will this be a fast function call?
Numba会自动将foo.foo识别为C可调用函数,还是需要通过设置CFFI包装器手动告诉它?
编辑:进一步反思,从Python解释器的角度来看,Cython函数只是标准的“内置”函数.所以这个问题可以更加通用:Numba是否优化对内置函数和方法的调用以绕过Python调用开销?