Introduction. Pourquoi tout ça?
Cette série d'articles se concentrera sur la programmation parallèle .
Partie 1. MPI - Introduction et premier programme.
Partie 2. MPI - Apprendre à surveiller les processus.
Se battre. introduction
Très souvent, les algorithmes les plus complexes nécessitent une énorme quantité de ressources de calcul dans des tâches réelles, lorsqu'un programmeur écrit du code dans sa compréhension standard de la programmation procédurale ou orientée objet (POO) , puis pour des tâches algorithmiques particulièrement exigeantes qui fonctionnent avec une grande quantité de données et nécessitent de minimiser le temps d'exécution de la tâche, il est nécessaire d'effectuer une optimisation.
Fondamentalement, 2 types d' optimisation sont utilisés, ou un mélange d'entre eux: la vectorisation et la parallélisation des
calculs. Comment sont-ils différents?
Les calculs sont effectués sur le processeur, le processeur utilise des "magasins" de données spéciaux appelés registres. Les registres du processeur sont directement connectés aux éléments logiques et nécessitent beaucoup moins de temps pour effectuer des opérations sur les données que les données de la RAM, et encore plus sur un disque dur, car pour ce dernier, le transfert de données prend une assez grande partie du temps. Il existe également dans les processeurs une zone de mémoire appelée Cache, elle stocke les valeurs qui sont actuellement impliquées dans les calculs ou y participeront dans un proche avenir, c'est-à-dire les données les plus importantes.
La tâche d'optimisation de l'algorithme revient à construire correctement une séquence d'opérations et à placer de manière optimale les données dans le cache, en minimisant le nombre de transferts de données possibles depuis la mémoire.
? - . ++: 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.
Dans ce court article, en utilisant le programme le plus simple comme exemple, nous avons appris à exécuter des fichiers C ++ avec du code MPI et avons déterminé quel type d'animal est MPI et avec quoi il est mangé. Dans d'autres tutoriels, nous examinerons des programmes plus utiles et passerons enfin à la communication entre les processus.