다른 jitted 함수를 호출하는 Numba-jitted 함수가이를 인식하고 Python 객체 계층을 거치지 않고 자동으로 빠른 C 호출 규칙을 사용하므로 높은 Python 함수 호출을 피할 수 있습니다. 오버 헤드 :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
뿐만 아니라 표준 파이썬 모듈 bar.py
:
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
을 인식하거나 내가해야합니까 그럼 제가 사이 썬 모듈, foo.pyx
가 있다고 가정 해 보자 CFFI wrapper를 설정하여 수동으로 알려주시겠습니까?
EDIT : 더 자세히 살펴보면 Cython 함수는 파이썬 인터프리터에서 볼 때 표준 "내장"함수 일뿐입니다. 그렇다면 Numba는 파이썬 호출 오버 헤드를 우회하는 내장 함수와 메소드에 대한 호출을 최적화합니까?
감사합니다. 좋은 정보! 1) 이것이 Numba 구현 또는 본질적으로 어려운 것의 한계인지 알고 있습니까? 2) Cython 기능을위한 CFFI 래퍼를 만드는 데 큰 어려움이있는 것처럼 들리도록하십시오. C 측에서 함수 포인터를 가져 와서 적절한 서명을 사용하여 CFFI/ctypes 함수 객체로 감쌀 수 없었습니까? 당신은 그 접근법에 문제가있을 것을 미리 예상합니까? – cfh