Parte 1. MPI - Introdução e Primeiro Programa

Introdução. Por que tudo isso?

Esta série de artigos enfocará a programação paralela .





  • Parte 1. MPI - Introdução e o primeiro programa.





  • Parte 2. MPI - Aprendendo a monitorar processos.






Batalhar. Introdução

Muitas vezes, os algoritmos mais complexos requerem uma grande quantidade de recursos computacionais em tarefas reais, quando um programador escreve código em seu entendimento padrão de programação procedural ou orientada a objetos (OOP) , então para tarefas algorítmicas especialmente exigentes que funcionam com uma grande quantidade de dados e exigem a minimização do tempo de execução da tarefa, é necessário realizar a otimização.



Basicamente, são usados 2 tipos de otimização, ou uma mistura deles: vetorização e paralelização de

cálculos. Como eles são diferentes?





Os cálculos são executados no processador, o processador usa "armazenamentos" de dados especiais chamados registradores. Os registradores do processador estão diretamente conectados a elementos lógicos e requerem muito menos tempo para realizar operações nos dados do que os dados da RAM, e ainda mais em um disco rígido, já que para este último, a transferência de dados leva uma grande parte do tempo. Também nos processadores existe uma área de memória chamada Cache, que armazena aqueles valores que estão atualmente envolvidos nos cálculos ou irão participar deles em um futuro próximo, ou seja, os dados mais importantes.





A tarefa de otimizar o algoritmo se resume a construir corretamente uma sequência de operações e colocar os dados de maneira ideal no Cache, minimizando o número de possíveis transferências de dados da memória.





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






Neste breve artigo, usando o programa mais simples como exemplo, aprendemos como executar arquivos C ++ com código MPI e descobrimos que tipo de animal é MPI e com o que é comido. Em outros tutoriais, veremos programas mais úteis e, finalmente, passaremos para a comunicação entre processos.








All Articles