.. _td2acenoncesession2Dparallelisationlocalrst: ====================================== 2A.i - Parallélisation locale (énoncé) ====================================== .. only:: html **Links:** :download:`notebook `, :downloadlink:`html `, :download:`python `, :downloadlink:`slides `, :githublink:`GitHub|_doc/notebooks/td2a/td2a_cenonce_session_2D_parallelisation_local.ipynb|*` Parallélisation avec `joblib `__. .. code:: ipython3 from jyquickhelper import add_notebook_menu add_notebook_menu() .. contents:: :local: La parallélisation des calculs permet d’accélèrer l’exécution d’un programme au prix de deux contraintes : - La `synchronisation `__ : écrire un programme avec des calculs en parallèle est plus complexe. Il faut souvent attendre que des processus s’exécutant en parallèle se terminent avant de passer à l’étape suivante avec l’ensemble des résultats. - La `communication `__ : il faut communiquer aux différents processus d’exécutant en parallèle les tâches qu’ils doivent exécuter. Selon la parallélisation choisie, le coût n’est pas négligeable (communication réseau par exemple). La parallélisation est assez récente. Elle est née avec les premiers processeurs `multitâche `__ et les premiers `systèmes d’exploitation `__ avec des `interfaces graphiques `__. - `thread `__ : `async, await `__, `queue `__, `threading `__ - `processus `__ : `concurrent.futures `__, `multiprocessing `__, `joblib `__ - `cluster `__ joblib ------ .. code:: ipython3 from math import sqrt from joblib import Parallel, delayed %timeit Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(100000)) .. parsed-literal:: 1 loop, best of 3: 2.23 s per loop .. code:: ipython3 %timeit [sqrt(i ** 2) for i in range(100000)] .. parsed-literal:: 10 loops, best of 3: 70.7 ms per loop