I want to reduce the time of my calculations with multiprocessing. I do not understand why with numpy object, the multiprocessing work as bad (or what I am doing wrong).
I compare calculation with in parallel 1 process, 3 processes or 6 processes (with a 6 core CPU -> 12 logical CPU). (All cores are used, I am on windows : I tried this answer but it is useless)
- With the simple_function (without use of numpy object) the multiprocessing works correctly: - average time for 1 process in parallel : 3.4s (100%)
- average time for 3 process in parallel : 1.3s ( 38%)
- average time for 6 process in parallel : 0.9s ( 25%)
 
- With the numpy_function (without numpy matrix) the multiprocessing is almost useless: - average time for 1 process in parallel : 0.18s (100%)
- average time for 3 process in parallel : 0.12s ( 71%)
- average time for 6 process in parallel : 0.13s ( 74%)
 
from multiprocessing import Pool
from time import time
from numpy import ones
def simple_function(x):
    for i in range(int(1e8)):
        x*x
def numpy_function(x):
    m = x*ones((1000, 1000))
    for i in range(int(100)):
        m*2
if __name__ == '__main__':
    parallel_comput = 1
    pool = Pool(12)
    print('simple_function')
    for ii in range(10):
        t0 = time()
        pool.map(simple_function, range(parallel_comput))
        tf = time() - t0
        print(tf)
    print('numpy_function')
    for ii in range(10):
        t0 = time()
        pool.map(numpy_function, range(parallel_comput))
        tf = time() - t0
        print(tf)
- parallel_comput is set to 1, 3 or 6
How can I improve my code ?
