Introducción. ¿Por qué todo esto?
Esta serie de artículos se centrará en la programación paralela .
Parte 1. MPI - Introducción y primer programa.
Parte 2. MPI - Aprendiendo a monitorear procesos.
A la batalla. Introducción
Muy a menudo, los algoritmos más complejos requieren una gran cantidad de recursos computacionales en tareas reales, cuando un programador escribe código en su comprensión estándar de programación procedimental u orientada a objetos (OOP) , luego para tareas algorítmicas especialmente exigentes que trabajan con una gran cantidad de datos y requieren minimizar el tiempo de ejecución de la tarea, es necesario realizar la optimización.
Básicamente, se utilizan 2 tipos de optimización, o una combinación de ellos: vectorización y paralelización de
cálculos. ¿En qué se diferencian?
Los cálculos se realizan en el procesador, el procesador utiliza "almacenes" de datos especiales llamados registros. Los registros del procesador están conectados directamente a elementos lógicos y requieren mucho menos tiempo para realizar operaciones con datos que con datos de RAM, y más aún en un disco duro, ya que para este último, la transferencia de datos toma una gran parte del tiempo. También en los procesadores existe un área de memoria llamada Cache, esta almacena aquellos valores que actualmente están involucrados en los cálculos o participarán en ellos en un futuro cercano, es decir, los datos más importantes.
La tarea de optimizar el algoritmo se reduce a construir correctamente una secuencia de operaciones y colocar los datos de manera óptima en la caché, minimizando el número de posibles transferencias de datos desde la memoria.
? - . ++: AVX , 256 , float32 . , 2 (256 / 32) = 8 float32 . , , , 8 , . : , .
, , , .. , .
, MPI.
MPI - Message Passing Interface ( ). , , - - . , .
: MIMD(Multiple Instruction Multiple Data - , ) SPMD(Single Program Multiple Data - , ).
, , . MIMD - , SPMD. MPI , ( , ) SPMD.
MPI - , . . Ubuntu Budgie 20.04 LTS .
:
[user-name]$ sudo apt-get update
[user-name]$ sudo apt-get install gcc
[user-name]$ sudo apt-get install mpich
, GCC, , C\++&MPI .
.
MPI- - , . N , . MPI MPI_[Name], .
:
- . ++/ MPI_Comm. , , , . MPI_COMM_WORLD. MPI_COMM_SELF, MPI_COMM_NULL, .
- , . , -, , , .
- 0 32767( . MPI_TAG_UB).
, MPI. MPI :
int MPI_Init(int *argc, char ***argv);
int MPI_Finalize(void);
, , , MPI_Init, , . .
++ MPI.
#include <stdio.h>
#include "mpi.h"
int main(int argc, char **argv)
{
printf("Before MPI_INIT\n");
MPI_Init(&argc, &argv);
printf("Parallel sect\n");
MPI_Finalize();
printf("After MPI_FINALIZE\n");
return 0;
}
*.cpp, ( main.cpp):
[user-name]$ mpic++ main.cpp -o main
[user-name]$ mpiexec -n 2 ./main
MPI-, . , -n 2 , ? , 2 .
. "Before ..." "After ..." , MPI Init-Finalize.
En este breve artículo, usando el programa más simple como ejemplo, aprendimos cómo ejecutar archivos C ++ con código MPI y descubrimos qué tipo de animal es MPI y con qué se come. En más tutoriales, veremos programas más útiles y finalmente pasaremos a la comunicación entre procesos.