I am trying to use some parallel computations in my implementation of machine learning algorithms, using joblib
, especially the technique used on this page.
The following examples are for me to understand parallelism, I have the same problem as the second example in my ML algorithms.
This example runs on all 4 cores as expected:
from joblib import Parallel, delayed
N_PARAM = 10000
N_TEST_FUN = 10000000
def testfunc(data):
for _ in range(N_TEST_FUN):
for i in data:
i*i
def run(niter=10):
data = [list(range(N_PARAM)) for _ in range(niter)]
pool = Parallel(n_jobs=-1, verbose=1, pre_dispatch='all')
results = pool(delayed(testfunc)(dd) for dd in data)
if __name__ == '__main__':
run()
While this example only runs on 1:
from joblib import Parallel, delayed
N_PARAM = 10000
N_TEST_FUN = 10000000
def testfunc():
for _ in range(N_TEST_FUN):
for i in range(N_PARAM):
i**2
def run(niter=10):
pool = Parallel(n_jobs=-1, verbose=1, pre_dispatch="all")
pool(testfunc() for _ in range(niter))
if __name__ == "__main__":
run()
which I do not understand at all. Why is that ?
I am Ubuntu 18.10, I use joblib 0.13.2 and python 3.6.8 from an Anaconda distribution.