I want to speed up my code by parallel in Numba (0.55.1 version) as below: As it contain a for loop, I want to speed it up by parallel computing with Numba
from numba import prange
from numba import njit
import numpy as np
from numpy import linalg as LA
import time
@njit(nogil=True)
def func(n):
nprime = n-1
main = np.sqrt(2.) * np.random.normal(0., 1., (nprime))
off = np.random.normal(0., 1., (nprime, nprime))
tril = np.tril(off, -1)
W_n = tril + tril.T
np.fill_diagonal(W_n, main)
eigenvalues = LA.eigvals(W_n)
return np.sort(eigenvalues)[::-1][0:2]
@njit(nogil=True, parallel=True)
def GOE_L12_sim_pa(n=200, rep=500):
for x0 in prange(rep):
func(n)
start = time.time()
GOE_L12_sim_pa()
end = time.time()
print(end-start)
Error:
OMP: Error #131: Thread identifier invalid.
OMP: Error #131: Thread identifier invalid.
Noting that it works when I change the decorator from @njit(nogil=True, parallel=True) to @njit(nogil=True).