¿Qué es MPI?
Siglas parra Message Passing Interface. Interfaz de comunicación entre distintos
dispositivos/up a través de una red de manera eficiente y rápido.
Es considerado como middleware. Es software que se encuentra entre la capa de
aplicación y el OS. Para abstraer todo el funcionamiento o lógica relacionada a la
comunicación en la red.
MPI High – level View
Capa aplicación
|
MPI
|
OS
¿Dónde está lo paralelo?
- Patrón divide and Conquer
- Usualmente en clusters
- Aprovechamos el procesamiento o memoria de múltiples dispositivos en la
red
Desventajas:
ALTA dependencia de la red
- Ancho de banda
- Limitaciones físicas
- Buses
- Redes de interconexión
Colaboradores de MPI
- AMD
- ARM
- Cisco
- Meta
- Fujitso
- IBM
- Intel
- Nvidia
- Oracle
Concepto básicos de mensajes
• Destino
• Fuentes / Origen
• Contenido
• Longitud
• Tipo
Organización de Programas en MPI
Encabezados mpi.h
Inicio ps
Inicialización del entorno
Tareas paralelas/ intercambio de mensajes
Terminación de entorno
Fin de PS
Grupos Comunicación (Comunication Domain)
Definir que procesos pueden comunicarse entre si
Ya se provee una estructura de datos
MPI_COMM_WORD
Ranks
Sirven como identificadores dentro de la red
MPI_Comm_rank()
Subrutinas básicas
MPI_Init(&argc, & argv)
MPI_Comm_size( comm, &size)
MPI_Finalize()
Subrutinas de comunicación
MPI_send()
MPI_Recv()
Tipos de mensajeria en Open MPI
• Punto a Punto
- Emisor
- Receptor
- Uso: envió de mensajes específicos
- Operaciones: Send, Recv
• Colectivos
- Múltiples emisores – 1 receptor
- Múltiples receptores – 1 emisor
- Uso: dividir el trabajo
- Operaciones: Send, Recv, Broadcast, Scatter, Reduce
Punto a punto
Tenemos requisitos para el envió y recepción de mensajes
Send Recv
• Buffer name • Buffer name
• Tipo • Tipo
• Comm name • Comm name
• Destinatario • remitente
Recepción flexible
Es posible recibir mensajes cuando no conocemos
- Remitente
- Tag
- Cantidad de mensajes
Los requisitos de send cambian cuando se tiene recepción flexible
Send Recv
• Destinatario • MPI_ANY_SOURCE
• Tag • MPI_ANY_TAG
• Buffer name • Buffer name
• Comm • comm
Punto a punto (Suma de #s consecutivos)
Array [1,2,3,4,5,6,7,8,9,10]
- Inicializar array, variable de acumulación
- Leer primer elemento del array
- Sumamos el valor a la variable
- Aumentar índice
- Repetir
¿Cuáles son los pasos a seguir?
- Identificamos las tareas
- Definir que proceso maneja cada tarea
- Identificar el rank
- Dependiendo del rank asignamos trabajo
Identificar tareas
1. Inicializar el array
2. Calcular el # de elementos a repartir
3. Definir subarrays
4. Repartir subarrays
5. Realizar las sumas parciales
6. Acumular los resultados