나는이 예를 해제하고 있어요 :numba 함수는 언제 컴파일됩니까?
http://numba.pydata.org/numba-doc/0.15.1/examples.html#multi-threading
를 그리고 있음 상태 : 컴파일이 주 스레드에서 발생해야하기 때문에 당신은 확실히 inner_func이 시점에서 컴파일해야
. 이 예제에서는 jit()을 사용하기 때문에이 경우이다.
함수에서 jit를 호출하면 해당 시점에 컴파일이 수행됩니다.
jit
을 데코레이터로 지정된 인수 유형으로 사용했던 함수에서 jit
을 호출하는 대신 멀티 스레드 예제가 작동합니까? 제 생각에 이것은 데코레이터를 사용하여 함수를 정의 할 때 함수를 컴파일할지 묻는 것과 같습니다.
import numba as nb
import numpy as np
def inner_func(result, a, b):
threadstate = savethread()
for i in range(len(result)):
result[i] = np.exp(2.1 * a[i] + 3.2 * b[i])
restorethread(threadstate)
signature = nb.void(nb.double[:], nb.double[:], nb.double[:])
inner_func_nb = nb.jit(signature, nopython=True)(inner_func)
import numba as nb
import numpy as np
signature = nb.void(nb.double[:], nb.double[:], nb.double[:])
@nb.jit(signature, nopython=True)
def inner_func(result, a, b):
threadstate = savethread()
for i in range(len(result)):
result[i] = np.exp(2.1 * a[i] + 3.2 * b[i])
restorethread(threadstate)
아주 좋은 설명입니다. – evan54