Problème :
Vous disposez d'une grande matrice 2D qui nécessite un traitement sur plusieurs nœuds utilisant MPI. La seule communication entre les nœuds implique le partage des valeurs de bord après chaque pas de temps.
Approche :
L'approche que vous proposez, décrite dans la question, est adaptée à ce problème. Les segments de code suivants illustrent l'implémentation suggérée :
// (assume A is a 2D array) if (myrank == 0) { for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&A[i][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Recv(&B[0][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } } if (myrank == 1) { for (i = x; i < xx; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&B[i][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD); MPI_Recv(&A[0][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } }
Fonctions MPI supplémentaires :
Considérations :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!