title |
---|
Unidad 9 |
-
MPI es un estándar de comunicación entre procesos para sistemas distribuidos y paralelos.
-
MPI4PY proporciona una interfaz para MPI (Message Passing Interface) en Python.
-
Permite a los desarrolladores de Python crear programas paralelos y distribuidos.
-
Ofrece una amplia gama de funciones y utilidades para la comunicación entre procesos.
-
Proporciona soporte para diferentes implementaciones de MPI.
::::{grid} :gutter: 3
:::{grid-item-card} :class-body: text-right :class-header: bg-light text-center
- Estándar de comunicación para sistemas distribuidos y paralelos.
- Ofrece una amplia gama de funciones y utilidades para la comunicación entre procesos.
- Proporciona soporte para diferentes implementaciones de MPI.
:::
:::{grid-item-card} :class-body: text-right :class-header: bg-light text-center
- Requiere conocimiento de MPI para utilizarlo de manera efectiva.
- La implementación y configuración puede ser más compleja que con otras bibliotecas.
- No viene incluido por defecto en la biblioteca estándar de Python.
:::
::::
::::{grid} :gutter: 3
:::{grid-item-card} :class-body: text-right :class-header: bg-light text-center
- Incluido en la biblioteca estándar de Python.
- Ofrece una interfaz de programación sencilla y coherente.
- Es fácil de utilizar para problemas sencillos de paralelización.
:::
:::{grid-item-card} :class-body: text-right :class-header: bg-light text-center
- No está diseñado específicamente para sistemas distribuidos.
- No proporciona la misma funcionalidad para la comunicación entre procesos que MPI4PY.
- No es tan escalable como MPI4PY para aplicaciones de alta demanda computacional.
:::
::::
-
Descargar el instalador desde: https://www.microsoft.com/en-us/download/details.aspx?id=100593
-
Seleccionar .exe
-
Instalar en la ruta por defecto: C:\Program Files\Microsoft MPI\
-
Agregar en las variables de usuario: C:\Program Files\Microsoft MPI\Bin
-
Ya en su ambiente de anaconda, instalar la librería: pip install mpi4py
-
Verificar si está funcionando, ejecutando en la terminal del ambiente donde se instaló:
mpiexec -n 4 python -c "from mpi4py import MPI; comm = MPI.COMM_WORLD; print('Hola desde el proceso', comm.rank)"
-
Salida esperada:
<img src="_static/images/U9_3.png"/>
-
En MPI, los procesos se identifican por una secuencia de enteros positivos llamados rangos.
-
La función "Get_rank()" de MPI devuelve el rango del proceso que la llamó.
-
El argumento "comm" en "Get_rank()" es un comunicador que define su propio conjunto de procesos que pueden comunicarse entre sí.
-
El código muestra cómo obtener e imprimir el rango del proceso actual.
-
Cada proceso en la ejecución de MPI corre el mismo binario compilado y recibe las mismas instrucciones.
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `1-HolaMundoConMPI.py`
- Compilar usando:
```bash
mpiexec -n 5 python .\1-HolaMundoConMPI.py
<img src="_static/images/U9_4.png"/>
-
MPI4py es una biblioteca que permite la comunicación entre procesos en programación paralela mediante MPI.
-
Esta comunicación se realiza a través de un comunicador (Comm) que agrupa los procesos participantes.
-
Cada proceso posee un identificador único llamado "rank".
-
Para enviar datos, se utiliza la función comm.send(), especificando el dato y el proceso receptor. Para recibir datos, se usa la función comm.recv(), indicando el proceso emisor.
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `2-ComunicacionPuntoAPunto.py`
- Compilar usando:
```bash
mpiexec -n 9 python .\2-ComunicacionPuntoAPunto.py
-
Métodos de Comunicación: comm.send() y comm.recv() son funciones bloqueantes en mpi4py.
-
Problema de Deadlock: si dos procesos llaman a comm.recv() antes que comm.send(), pueden bloquearse mutuamente causando un deadlock.
-
Solución Efectiva: hacer las funciones de envío y recepción asimétricas o utilizar la función comm.sendrecv().
-
Función Sendrecv: unifica el envío y recepción de mensajes en una única llamada, evitando el interbloqueo.
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `3-EvitarProblemasDePuntoMuerto.py`
- Compilar usando:
```bash
mpiexec -n 9 python .\3-EvitarProblemasDePuntoMuerto.py
- Ver el archivo de Python: `4-EvitarProblemasDePuntoMuertoOp2.py`
- Compilar usando:
```bash
mpiexec -n 9 python .\4-EvitarProblemasDePuntoMuertoOp2.py
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `5-ComunicacionColectivaBroadcast.py`
- Compilar usando:
```bash
mpiexec -n 9 python .\5-ComunicacionColectivaBroadcast.py
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `6-ComunicacionColectivaScatter.py`
- Compilar usando:
```bash
mpiexec -n 10 python .\6-ComunicacionColectivaScatter.py
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `7-ComunicacionColectivaGather.py`
- Compilar usando:
```bash
mpiexec -n 5 python .\7-ComunicacionColectivaGather.py
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `8-ComunicacionColectivaAllToAll.py`
- Compilar usando:
```bash
mpiexec -n 5 python .\8-ComunicacionColectivaAllToAll.py
Se desea multiplicar las matrices A y B, lo cual debería generar una matriz nueva C
Desde el proceso 0 se transmite la matriz B a todos los procesos
Cada proceso recibe una subsección de A (100x500)
Comunicación colectiva mediante dispersión (scatter)
Se recogen en el proceso 0 los resultados de la multiplicación de todos los procesos
Multiplicación de matrices
- <a href="https://drive.google.com/drive/folders/1xv7Tm4bgeDYSSflGIwJlUC1Dldtu8Biy?usp=sharing" target="_blank">Acceder a carpeta de archivos Python</a>
- Ver el archivo de Python: `9-MultiplicaciónDeMatrices.py`
- Compilar usando:
```bash
mpiexec -n 4 python .\9-MultiplicaciónDeMatrices.py
- Ver el archivo de Python: `9-MultiplicaciónDeMatrices2.py`
- Compilar usando:
```bash
mpiexec -n 4 python .\9-MultiplicaciónDeMatrices2.py
- Ver el archivo de Python: `9-MultiplicaciónDeMatrices3.py`
- Compilar usando:
```bash
mpiexec -n 4 python .\9-MultiplicaciónDeMatrices3.py
- Ver el archivo de Python: `9-MultiplicaciónDeMatrices4.py`
- Compilar usando:
```bash
mpiexec -n 5 python .\9-MultiplicaciónDeMatrices4.py
-
Ver administrador de tareas
-
Ver temperatura del procesador - Ventilador
Ver el Chapter 3: Process-based Parallelism. Páginas de la 97 a la 126.
- <a href="https://drive.google.com/drive/folders/14rqT_OEtGkVUhYAtlXyjMamBwHZDFIRM?usp=sharing" target="_blank">Notebooks (recursos para estudiar)</a>
Ver la subsección **Evaluemos lo aprendido!!**