MPI

Message Passing Interface (MPI) es un estándar para la programación paralela o distribuida, que permite a múltiples procesos (que pueden estar en diferentes computadoras) comunicarse entre sí mediante el envío y recepción de mensajes.
Se puede integrarse con lenguajes orientados a objetos como C++ o Python.
- Aplicación típica: programación de alto rendimiento (HPC), como simulaciones científicas o cálculos complejos en clústeres de computadoras.
- Ejemplo en C++ con MPI: Usar
MPI_Send()yMPI_Recv()para enviar datos entre nodos de una red.
MPI es particularmente útil en el ámbito de la programación concurrente cuando se trata de desarrollar aplicaciones que requieren un alto rendimiento y escalabilidad en sistemas distribuidos.
aquí tienes un ejemplo simple de cómo usar MPI en C para realizar una suma colectiva en un clúster de procesadores:
Código
#include <stdio.h>
#include <mpi.h>
int main(int argc, char** argv) {
// Inicializar el entorno MPI
MPI_Init(&argc, &argv);
// Obtener el rango y el tamaño del comunicador
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
// Definir un array de números en cada proceso
int local_numbers[3] = {rank + 1, rank + 2, rank + 3};
int global_sum[3];
// Realizar una suma colectiva de los números
MPI_Allreduce(local_numbers, global_sum, 3, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
// Imprimir los resultados
printf("Proceso %d: Números locales [%d, %d, %d], Suma global [%d, %d, %d]\n",
rank, local_numbers[0], local_numbers[1], local_numbers[2],
global_sum[0], global_sum[1], global_sum[2]);
// Finalizar el entorno MPI
MPI_Finalize();
return 0;
}
Este programa MPI realiza la inicialización del entorno MPI, obtiene el rango y el tamaño del comunicador, y luego define un conjunto de números locales en cada proceso. Luego, utiliza la función MPI_Allreduce para realizar una suma colectiva de estos números y obtener la suma global, que se imprime en cada proceso.
Para compilar y ejecutar el programa en un clúster de procesadores usando, por ejemplo, el compilador mpicc:
mpicc ejemplo_mpi.c -o ejemplo_mpi
mpiexec -n 4 ./ejemplo_mpi
Este ejemplo utiliza Message Passing Interfacpara distribuir la carga de trabajo y realizar una operación colectiva, la suma, entre todos los procesos en el clúster. Cada proceso tiene un conjunto de números locales, y el resultado final es la suma global de todos estos conjuntos.