I would like to post another example of numba thread problem that I do not know how to solve. It's a very simple problem that calculates in parallel the inverse of block matrices.
from numpy import empty,float64
from numpy.linalg import inv
from numba import njit, prange,set_num_threads
@njit(parallel=True)
def tester1(A,m,n):
inv_Lambda_p=empty((n,m,m),dtype=float64)
for i in prange(n):
inv_Lambda_p[i]=inv(ascontiguousarray(A[i]))
A=np.random.rand(1000000,10,10)
m=10
n=1000000
inv_a=tester1(A,m,n)
for i in range (16):
print("Thread ",i+1)
set_num_threads(i+1)
%timeit tester1(A,m,n)
Results
Thread 1
1.72 s ± 9.09 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 2
932 ms ± 32.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 3
680 ms ± 15.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 4
573 ms ± 13 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 5
555 ms ± 8.73 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 6
530 ms ± 4.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 7
511 ms ± 6.14 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 8
492 ms ± 4.15 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 9
478 ms ± 5.19 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 10
471 ms ± 4.37 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 11
498 ms ± 4.75 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 12
451 ms ± 1.82 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 13
442 ms ± 2.24 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 14
431 ms ± 3.37 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 15
421 ms ± 3.66 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Thread 16
442 ms ± 4.77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Why the times for more threads are slower for less? For instance look for 15 to 16 threads. Is this normal and why? My cpu is 8 cores 16 threads 3.7GHz 16 MB cache, Ram 16gb. Also my cpu is cooled by hydro cooling system.