post

MPI

MPI person encoding in laptop
Photo by Lukas on Pexels.com

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.

Leave a Reply

Your email address will not be published. Required fields are marked *