Teil 1. MPI - Einführung und erstes Programm

Einführung. Warum das alles?

Diese Artikelserie konzentriert sich auf die parallele Programmierung .





  • Teil 1. MPI - Einführung und das erste Programm.





  • Teil 2. MPI - Lernen, Prozesse zu überwachen.






Bekämpfen. Einführung

Sehr oft erfordern die komplexesten Algorithmen eine große Menge an Rechenressourcen in realen Aufgaben, wenn ein Programmierer Code in seinem Standardverständnis der prozeduralen oder objektorientierten Programmierung (OOP) schreibt , dann für besonders anspruchsvolle algorithmische Aufgaben, die mit einer großen Menge arbeiten von Daten und erfordern die Minimierung der Task-Ausführungszeit, ist es notwendig, eine Optimierung durchzuführen.



Grundsätzlich werden zwei Arten der Optimierung oder eine Mischung davon verwendet: Vektorisierung und Parallelisierung von

Berechnungen. Wie unterscheiden sie sich?





Berechnungen werden auf dem Prozessor durchgeführt, der Prozessor verwendet spezielle Datenspeicher, die als Register bezeichnet werden. Prozessorregister sind direkt mit logischen Elementen verbunden und benötigen viel weniger Zeit, um Operationen an Daten auszuführen als Daten aus dem RAM, und noch mehr auf einer Festplatte, da für letztere die Datenübertragung einen ziemlich großen Teil der Zeit in Anspruch nimmt. Auch in Prozessoren gibt es einen Speicherbereich namens Cache, in dem die Werte gespeichert werden, die derzeit an Berechnungen beteiligt sind oder in naher Zukunft daran teilnehmen werden, dh die wichtigsten Daten.





Die Aufgabe der Optimierung des Algorithmus besteht darin, eine Abfolge von Operationen korrekt zu erstellen und Daten optimal im Cache zu platzieren, wodurch die Anzahl möglicher Datenübertragungen aus dem Speicher minimiert wird.





? - . ++: 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.






In diesem kurzen Artikel haben wir am Beispiel des einfachsten Programms gelernt, wie man C ++ - Dateien mit MPI-Code ausführt, und herausgefunden, welche Art von Tier MPI ist und womit es gegessen wird. In weiteren Tutorials werden wir uns nützlichere Programme ansehen und schließlich mit der Kommunikation zwischen Prozessen fortfahren.








All Articles