0% encontró este documento útil (0 votos)
103 vistas

Programacion Paralela Con Python

Este documento presenta una introducción a la programación paralela con Python. Explora diferentes modelos de programación paralela como memoria compartida con procesos y hilos, y memoria distribuida con paso de mensajes. También cubre implementaciones como POSIX Threads, OpenMP, y MPI. Finalmente, ofrece ejemplos de cómo usar extensiones en C y Cython para mejorar el rendimiento de código Python para computación paralela y de alto rendimiento.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
103 vistas

Programacion Paralela Con Python

Este documento presenta una introducción a la programación paralela con Python. Explora diferentes modelos de programación paralela como memoria compartida con procesos y hilos, y memoria distribuida con paso de mensajes. También cubre implementaciones como POSIX Threads, OpenMP, y MPI. Finalmente, ofrece ejemplos de cómo usar extensiones en C y Cython para mejorar el rendimiento de código Python para computación paralela y de alto rendimiento.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 32

Programación Paralela con

Python

Juan David Pineda-Cárdenas

Centro de Computación Científica APOLO


Tomado de: https://futurism.com/russian-nuclear-scientists-busted-mining-bitcoin-work-supercomputers/
Figura: Casa Slytherin - Harry Potter
Taxonomía de Flynn

Tomado de: Introduction to Parallel Computing


https://computing.llnl.gov/tutorials/parallel_comp/
Modelos de Programación Paralela

● Memoria compartida
○ Procesos
○ Hilos
● Memoria distribuida
○ Paso de mensajes
Modelos de Programación Paralela: Memoria
compartida (Sin hilos)
● Los procesos o tareas tienen
un espacio de direcciones
común, éstos escriben leen
y/o escriben asíncronamente.
● Mecanismos como locks y
semáforos se usan para
controlar el acceso a la
memoria compartida,
previniendo deadlocks y
condiciones de carrera
● Es probablemente el modelo
más simple Tomado de: Introduction to Parallel Computing
https://computing.llnl.gov/tutorials/parallel_comp/
Modelos de Programación Paralela: Memoria
compartida (Sin hilos)
● Es un tipo de programación de
memoria compartida.
● Un simple “proceso pesado” puede
tener múltiples “procesos ligeros”, con
caminos de ejecución paralelos.
● Cada hilo tiene sus propios datos
locales, pero también comparte todos
sus recursos con su proceso.
● Los hilos se comunican entre sí
usando la memoria global. Esto
requiere construcciones de
sincronización que manejen la
concurrencia
Modelos de Programación Paralela: Memoria
compartida (Sin hilos) Implemetaciones
● POSIX Threads
○ Especificado por IEEE 1003.1c (1995). Solo lenguaje C
○ Parte de las bibliotecas de los sistemas UNIX/Linux
○ Basado en bibliotecas
○ Comúnmente conocido como PThreads
○ Paralelismo MUY explícito, requiere una atención al detalle
significativa por parte del programador
● OpenMP
○ Estándar de la industria, soportado y creado por un grupo de
fabricantes y de software, organizaciones e individuos bastante
amplio.
○ Basado en directivas del compilador
○ Portable/Multiplataforma, incluyendo Unix y Windows
○ Disponible en C/C++ y Fortran
○ Puede ser bastante simple de usar, provee “paralelismo
incremental” y puede empezar con código serial.
Modelos de Programación Paralela:
Memoria distribuida: Paso de mensajes
● Un conjunto de tareas que usan su propia memoria local
durante el cómputo. Múltiples tareas pueden residir en la
misma máquina física y/o entre entre un número arbitrario
de máquinas.
● Las tareas intercambian datos a través de las
comunicaciones, enviando y recibiendo mensajes.
● La transferencia de datos usualmente requiere
operaciones cooperativos realizadas por cada uno de los
procesos. Por ejemplo, una operación de envío tiene que
tener una operación de recepción como contraparte.
Tomado del Lawrence Livermore National Laboratory: Introduction to Parallel Computing
Memoria Distribuida / Paso de Mensajes
Implementaciones
● Desde una perspectiva de programación, suele ser un
conjunto de bibliotecas de subrutinas. El programador es
responsable de determinar todo el paralelismo.
● Desde los 80’s se han realizado esfuerzos al respecto,
hasta 1992 que se crea el MPI Forum
● MPI-1 1994
● MPI-2 1996
● MPI-3 2012
Directivas MPI

Tomado del Lawrence Livermore National Laboratory: Introduction to Parallel Computing


Tomado del Lawrence Livermore National Laboratory: Introduction to Parallel Computing
Tomado del Lawrence Livermore National Laboratory: Introduction to Parallel Computing
Tomado de: https://insidehpc.com/2017/02/python-for-hpc-2/
https://software.intel.com/en-us/distribution-for-python
Lo bueno y lo malo

• Comunidad • Interpretado
• Fácil de Leer y Aprender • Dos versiones
• Orientado a Objetos • 3.x no retrocompatible
• ¡Portable! con 2.x
• Cantidad de librerías • Dinámicamente tipado
a. Numpy
b. Scipy
c. Mpi4py
https://anaconda.org/
http://jupyter.org/
https://www.jetbrains.com/pycharm-edu/download/
Código en C

Tomado de: Python in High Performance Computing. Jussi Enkovaara.


http://www.training.prace-ri.eu/uploads/tx_pracetmo/pythonHPC.pdf
Código en Python

Tomado de: Python in High Performance Computing. Jussi Enkovaara.


http://www.training.prace-ri.eu/uploads/tx_pracetmo/pythonHPC.pdf
Procesamiento paralelo y multiprocesamiento

SMP Cluster Computing


• dispy
• batchlib • pp (Parallel Python)
• delegate
• Celery • PyCOMPSs
• forkmap
• Deap • PyLinda
• forkfun
• disco • pyMPI
• ppmap
• dispy • pypar
• POSH
• DistributedPython • pyPasSet
• pp (parallel python)
• exec_proxy • pynpvm
• pprocess
• execnet • pypvm
• processing
• IPython • Pyro
• PyCSP
• job_stream • Ray
• PyMP
• jug • rthread
• Ray
• mip4py • ScientifiPython
• remoteD
• Networkspaces • SCOOP
• VecPy
• PaPy • seppo
• papyros • Star-P for Python
• dask • superpy

Tomado de: https://wiki.python.org/moin/ParallelProcessing


¡No use Python Puro!

• Explore las APIS


• Numpy
• Scipy
• Escriba en
• C-Extensions
• Cython
• Numba
• Guarde en Formatos
Apropiados
• NetCDF
• HDF5
• Use algoritmos ya implementados
Tomado de: http://matthewrocklin.com/slides/sf-python-parallelism.html
¡Procesos!

Tomado de: http://matthewrocklin.com/slides/sf-python-parallelism.html


C-Extensions: Pasando un array Numpy a C
Python

C: myext.c

Tomado de: Python in High Performance Computing. Jussi Enkovaara.


http://www.training.prace-ri.eu/uploads/tx_pracetmo/pythonHPC.pdf
C-Extensions: Accediendo a los datos del arreglo

C: myext.c

Tomado de: Python in High Performance Computing. Jussi Enkovaara.


http://www.training.prace-ri.eu/uploads/tx_pracetmo/pythonHPC.pdf
C-Extensions: Definiendo la interfaz con Python
C: myext.c

Construir como librería compartida

Tomado de: Python in High Performance Computing. Jussi Enkovaara.


http://www.training.prace-ri.eu/uploads/tx_pracetmo/pythonHPC.pdf
C-Extensions: Uso desde Python

Python

Tomado de: Python in High Performance Computing. Jussi Enkovaara.


http://www.training.prace-ri.eu/uploads/tx_pracetmo/pythonHPC.pdf
Recursos
Este conjunto de diapositivas están basadas e
inspiradas en los siguientes recursos:
• Python in High Performance Computing. Jussi Enkovaara. CSC -
Tieteen tietotekniikan keskus Oy. CSC - IT Center for Science
Ltd.
http://www.training.prace-ri.eu/uploads/tx_pracetmo/python
HPC.pdf
• Python Parallel Programming Cookbook. Master Efficient
parallel programming to build powerful applications using
Python. Giancarlo Zaccone. PACKT Publishing. OpenSource*.
2015.
• TACC - HPC Python -
https://portal.tacc.utexas.edu/-/hpc-python
• Python and Parallelism - Matthew Rocklin. Continuum
Analytics.
http://matthewrocklin.com/slides/sf-python-parallelism.html
• Numba - https://numba.pydata.org/
• Introduction to Parallel Computing -
https://computing.llnl.gov/tutorials/parallel_comp/
• MPI4py crash course. Ariel Lozano and David COlignon. CÉCI
training. October 25, 2017.
http://www.ceci-hpc.be/assets/training/mpi4py.pdf
• MPI for Python http://mpi4py.readthedocs.io/en/stable/
• Extending Python with C or C++ -
https://docs.python.org/2/extending/extending.html
In Memoriam
01001010 01101111 01101000 01101110 00100000 01000101 01100100 01100111
01100001 01110010 00100000 01000011 01101111 01101110 01100111 01101111
01110100 01100101 00100000 01000011 01100001 01101100 01101100 01100101
00001010 00101000 00110001 00111001 00111000 00110010 00100000 00101101
00100000 00110010 00110000 00110001 00111000 00101001

También podría gustarte