Partie 2. MPI - Apprendre à surveiller les processus

Cette série d'articles porte sur la programmation parallèle à l' aide de MPI .





  • Partie 1. MPI - Introduction et premier programme.





  • Partie 2. MPI - Apprendre à surveiller les processus.





Dans l'article précédent, nous avons expliqué comment exécuter un programme, ce qu'est MPI et pourquoi cette programmation parallèle est nécessaire si vous pouvez écrire sans elle. Dans cet article, nous supposons que le lecteur a lu le matériel présenté dans le précédent et passe à l'étape suivante dans l'étude de la technologie MPI , à savoir le contrôle de processus. Afin d'éviter l'indignation des programmeurs expérimentés, j'entendrai encore par «fils», «processus», etc. une partie d'un système informatique sur laquelle une instance spécifique d'un programme est en cours d'exécution (cette partie peut être un thread spécifique ou n'importe quel nœud informatique du système).






Numéros de processus et nombre total de processus

Pour effectuer des actions utiles lors de la création d'un programme parallèle, il est nécessaire de répartir les rôles entre les nœuds de calcul et les threads. Pour ce faire, il est simplement vital pour nous de savoir quel thread traite une instance particulière du programme qui s'exécute dessus, mais pour commencer, il serait bien de savoir combien d'entre eux sont en cours d'exécution.





Afin de savoir sur quel thread le programme est en cours d'exécution, il existe des procédures MPI_Comm_size . Il accepte un communicateur comme entrée (nous en reparlerons plus tard), et l'adresse mémoire où un entier sera écrit , c'est-à-dire le nombre de threads traitant le programme.





int MPI_Comm_size(MPI_Comm comm, int* size)
      
      



? , , . , , . MPI , MPI_COMM_WORLD. , , .





, . MPI_Comm_size. , . :





int MPI_comm_rank(MPI_Comm comm, int* rank)
      
      



.





2 , , .





#include <stdio.h>
#include "mpi.h"

int main(int argc, char **argv)
{	
	int rank, size;

	MPI_Init(&argc, &argv);
	
  MPI_Comm_size(MPI_COMM_WORLD, &size);
	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
	
  MPI_Finalize();
  
	printf("Process: %d, size: %d\n", rank, size);
	
	return 0;
}
      
      



5 :





Process: 0, size: 5
Process: 1, size: 5
Process: 2, size: 5
Process: 3, size: 5
Process: 4, size: 5
      
      



.





? , . , , , , .. , .





Comm_size, Comm_rank

. .





#include <stdio.h>
#include "mpi.h"

int main(int argc, char **argv)
{	
	const int MAX = 20;
	int rank, size;
	int n, ibeg, iend;

	MPI_Init(&argc, &argv);
	MPI_Comm_size(MPI_COMM_WORLD, &size);
	MPI_Comm_rank(MPI_COMM_WORLD, &rank);

	n = (MAX - 1) / size + 1;
	ibeg = rank * n + 1;
	iend = (rank + 1) * n;
	for(int i = ibeg; i <= ((iend > MAX) ? MAX : iend); i++)
	{
		printf("Process: %d, %d^2=%d\n", rank, i, i*i);
	}

	MPI_Finalize();
	
	return 0;
}
      
      



5 :





Process: 0, 1^2=1
Process: 0, 2^2=4
Process: 0, 3^2=9
Process: 0, 4^2=16
Process: 1, 5^2=25
Process: 1, 6^2=36
Process: 1, 7^2=49
Process: 1, 8^2=64
Process: 2, 9^2=81
Process: 2, 10^2=100
Process: 2, 11^2=121
Process: 2, 12^2=144
Process: 3, 13^2=169
Process: 3, 14^2=196
Process: 3, 15^2=225
Process: 3, 16^2=256
Process: 4, 17^2=289
Process: 4, 18^2=324
Process: 4, 19^2=361
Process: 4, 20^2=400
      
      



MAX=20. , , .





, , , : . MPI , , .





, , , - . , , . MPI_Init, , , , - , . .





. MPI <time>, .





double MPI_Wtime(void);
double MPI_Wtick(void);
      
      



, . , , . , Wtime , .





, MPI_WTIME_IS_GLOBAL, 0 1, .





.





. MPI_Get_processor_name. :





int MPI_Get_Processor_name(char* name, int* len);
      
      



.





MPI, . .





Pour consolider les connaissances que je vous suggère d' écrire un programme simple qui reconnaît si un nombre est premier aux nombres dans une plage prédéterminée de 1 à N . Cela vous montrera clairement à quel point il est facile et simple de paralléliser les calculs à l'aide de cette technologie et vous permettra de mettre toutes les compétences acquises dans votre tête.





Tout un moment agréable de la journée, les Khabravites et ceux qui sont tombés sur cet article de l'extérieur.








All Articles