他のjitted関数を呼び出すNumba-jitted関数がこれを認識し、Pythonオブジェクト層を経由するのではなく、高速のC呼び出し規約を自動的に使用することを知っています。オーバーヘッド:NumbaコードからCython関数を呼び出す
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関数を呼び出した場合、同じことが当てはまるかどうかです。
cpdef double foo(double x):
return x**2
と同様に、標準のPythonモジュールbar.py
:それでは、私はCythonモジュール、foo.pyx
を持っているとしましょう
import numba
import foo
@numba.jit
def bar(x):
return 4 * foo.foo(x) # will this be a fast function call?
ウィルNumbaは自動的にC-呼び出し可能な関数としてfoo.foo
を認識したり、私はする必要がありますかCFFIラッパーを手動で設定してください。
EDIT:さらに詳しく述べると、Cython関数は、Pythonインタプリタの視点から見ると、標準の「組み込み」関数です。そのため、より一般的な質問をすることができます:Numbaは、Python呼び出しオーバーヘッドをバイパスするための組み込み関数とメソッドへの呼び出しを最適化しますか?
ありがとう、良い情報! 1)これがNumbaの実装や本質的に難しいものの制限であるかどうか知っていますか? 2)Cython関数用のCFFIラッパーを作成する際に重大な問題が発生するようなサウンドにする。私は単にC側で関数ポインタを取得して、CFFI/ctypes関数オブジェクトとして適切なシグネチャを使用してラップすることはできませんでしたか?あなたはそのアプローチに何らかのトラブルを予見していますか? – cfh