Programacion Paralela Con Python
Programacion Paralela Con Python
Python
● 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
• 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
C: myext.c
C: myext.c
Python