when I execute the "A" program the result is displayed , but when i trying to add a piece "B" of code aims to read a .txt file nothing appear: program A: --------------------------------------- #include <malloc.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #include "math.h" #include "mpi.h" #define MAX_LIGNE 20 /* au maximum, 10 lignes */ #define MAX_COL 20 /* au maximum 8 colonnes */ #define NOM_A_LIRE "fichier1.txt" /*matrice a lire*/ typedef int Matrice[MAX_LIGNE][MAX_COL]; int main(int argc, char** argv) { int taskid, ntasks; int ierr, i, itask; int sendcounts[2048], displs[2048], recvcount; double **sendbuff, *recvbuff, buffsum, buffsums[2048]; double inittime, totaltime; const int nbr_etat = 10; double tab[nbr_etat]; for (int i = 0; i < nbr_etat; i++) tab[i] = i; for (int i = 0; i < nbr_etat; i++) printf("%0.0f ", tab[i]); printf("\n"); int nbr_elm[2] = { 4, 6 }; int dpl[2] = { 0, 4 }; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &taskid); MPI_Comm_size(MPI_COMM_WORLD, &ntasks); recvbuff = (double *)malloc(sizeof(double)*nbr_etat); if (taskid == 0) { sendbuff = (double **)malloc(sizeof(double *)*ntasks);// on execute pour deux proc sendbuff[0] = (double *)malloc(sizeof(double)*ntasks*nbr_etat); for (i = 1; i < ntasks; i++) { sendbuff[i] = sendbuff[i - 1] + nbr_etat; } } else { sendbuff = (double **)malloc(sizeof(double *)* 1); sendbuff[0] = (double *)malloc(sizeof(double)* 1); } if (taskid == 0){ srand((unsigned)time(NULL) + taskid); for (itask = 0; itask<ntasks; itask++) { int k; displs[itask] = itask*nbr_etat; int s = dpl[itask]; sendcounts[itask] = nbr_elm[itask]; for (i = 0; i<sendcounts[itask]; i++) { k = i + s; sendbuff[itask][i] = tab[k]; printf("+ %0.0f ", sendbuff[itask][i]); } printf("\n"); } } recvcount = nbr_elm[taskid]; inittime = MPI_Wtime(); ierr = MPI_Scatterv(sendbuff[0], sendcounts, displs, MPI_DOUBLE, recvbuff, recvcount, MPI_DOUBLE, 0, MPI_COMM_WORLD); totaltime = MPI_Wtime() - inittime; printf("\n >>>> \n"); buffsum = 0.0; printf("\n > %d < \n", taskid); for (i = 0; i<recvcount; i++) { buffsum = buffsum + recvbuff[i]; printf("* %0.0f ", recvbuff[i]); } printf("\n"); printf("(%d) %0.3f ", taskid, buffsum); ierr = MPI_Gather(&buffsum, 1, MPI_DOUBLE, buffsums, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); if (taskid == 0) { printf("\n"); printf("##########################################################\n\n"); printf(" --> APReS COMMUNICATION <-- \n\n"); for (itask = 0; itask<ntasks; itask++) { printf("Processus %d : Somme du vecteur reçu : %0.0f\n", itask, buffsums[itask]); } printf("\n"); printf("##########################################################\n\n"); printf(" Temps total de communication : %f secondes\n\n", totaltime); printf("##########################################################\n\n"); } /* Libération de la mémoire */ if (taskid == 0) { free(sendbuff[0]); free(sendbuff); } else { free(sendbuff[0]); free(sendbuff); free(recvbuff); } /* Finalisation de MPI */ MPI_Finalize(); } program B: ------------------------- #include <malloc.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #include "math.h" #include "mpi.h" #define MAX_LIGNE 20 /* au maximum, 10 lignes */ #define MAX_COL 20 /* au maximum 8 colonnes */ #define NOM_A_LIRE "fichier1.txt" /*matrice a lire*/ typedef int Matrice[MAX_LIGNE][MAX_COL]; int main(int argc, char** argv) { int taskid, ntasks; int ierr, i, itask; int sendcounts[2048], displs[2048], recvcount; double **sendbuff, *recvbuff, buffsum, buffsums[2048]; double inittime, totaltime; const int nbr_etat = 10; double tab[nbr_etat]; for (int i = 0; i < nbr_etat; i++) tab[i] = i; for (int i = 0; i < nbr_etat; i++) printf("%0.0f ", tab[i]); printf("\n"); int nbr_elm[2] = { 4, 6 }; int dpl[2] = { 0, 4 }; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &taskid); MPI_Comm_size(MPI_COMM_WORLD, &ntasks); recvbuff = (double *)malloc(sizeof(double)*nbr_etat); if (taskid == 0) { sendbuff = (double **)malloc(sizeof(double *)*ntasks);// on execute pour deux proc sendbuff[0] = (double *)malloc(sizeof(double)*ntasks*nbr_etat); for (i = 1; i < ntasks; i++) { sendbuff[i] = sendbuff[i - 1] + nbr_etat; } } else { sendbuff = (double **)malloc(sizeof(double *)* 1); sendbuff[0] = (double *)malloc(sizeof(double)* 1); } if (taskid == 0){ srand((unsigned)time(NULL) + taskid); for (itask = 0; itask<ntasks; itask++) { int k; displs[itask] = itask*nbr_etat; int s = dpl[itask]; sendcounts[itask] = nbr_elm[itask]; for (i = 0; i<sendcounts[itask]; i++) { k = i + s; sendbuff[itask][i] = tab[k]; printf("+ %0.0f ", sendbuff[itask][i]); } printf("\n"); } } recvcount = nbr_elm[taskid]; inittime = MPI_Wtime(); ierr = MPI_Scatterv(sendbuff[0], sendcounts, displs, MPI_DOUBLE, recvbuff, recvcount, MPI_DOUBLE, 0, MPI_COMM_WORLD); totaltime = MPI_Wtime() - inittime; printf("\n >>>> \n"); buffsum = 0.0; printf("\n > %d < \n", taskid); for (i = 0; i<recvcount; i++) { buffsum = buffsum + recvbuff[i]; printf("* %0.0f ", recvbuff[i]); } printf("\n"); printf("(%d) %0.3f ", taskid, buffsum); ierr = MPI_Gather(&buffsum, 1, MPI_DOUBLE, buffsums, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); if (taskid == 0) { printf("\n"); printf("##########################################################\n\n"); printf(" --> APReS COMMUNICATION <-- \n\n"); for (itask = 0; itask<ntasks; itask++) { printf("Processus %d : Somme du vecteur reçu : %0.0f\n", itask, buffsums[itask]); } printf("\n"); printf("##########################################################\n\n"); printf(" Temps total de communication : %f secondes\n\n", totaltime); printf("##########################################################\n\n"); } /*===============================================================*/ /* Libération de la mémoire */ if (taskid == 0) { free(sendbuff[0]); free(sendbuff); } else { free(sendbuff[0]); free(sendbuff); free(recvbuff); } /*===============================================================*/ /* Finalisation de MPI */ MPI_Finalize(); Matrice A; int m, n; /* ouvrir le fichier Matrices.dta sur le disque réseau pour la lecture */ FILE * aLire = fopen(NOM_A_LIRE, "r"); if (aLire == NULL) { printf("Le fichier n'existe pas"); } else { fscanf(aLire, "%d%d\n", &m, &n); ////void lire(FILE * aLire, Matrice mat, int nbLigne, int nbCol) for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) fscanf(aLire, "%d", &A[i][j]); fscanf(aLire, "\n"); } ////void afficher(Matrice mat, char nom[], int nbLigne, int nbCol) printf("\nContenu de la matrice de %d ligne(s) et %d colonne(s) :\n", m, n); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) printf("%d ", A[i][j]); printf("\n"); } printf("\n"); } fclose(aLire); } _______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss
participants (1)
-
Chafik sanaa