Jelajahi Sumber

Ajout info envoyer pour resultat

Loquicom 6 tahun lalu
induk
melakukan
12533951da
1 mengubah file dengan 27 tambahan dan 18 penghapusan
  1. 27 18
      Partie_1/MPI/Main.cpp

+ 27 - 18
Partie_1/MPI/Main.cpp

@@ -6,6 +6,8 @@
 #include <mpi.h>
 #include "color.h"
 
+#define DISPLAY_RANK 0
+
 using namespace std;
 
 void help(char* prog) {
@@ -88,42 +90,49 @@ int main(int argc, char* argv[]) {
                 MPI_Isend(&world_rank, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &finish);
             }
             //Envoi les infos de resolution au processus de rank 0
-            int pid, nbIte, heuriFill, heuriSolve, satisfFill, satisfSolve;
+            int pid;
+            double time;
+            unsigned int nbIte, heuriFill, heuriSolve, satisfFill, satisfSolve;
             pid = getpid();
-            MPI_Isend(&pid, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
-            MPI_Isend(&world_rank, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&pid, 1, MPI_INT, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&world_rank, 1, MPI_INT, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
+            time = gsat->realTime() - startTime;
+            MPI_Isend(&time, 1, MPI_DOUBLE, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
             nbIte = gsat->getNbIterations();
-            MPI_Isend(&nbIte, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&nbIte, 1, MPI_UNSIGNED, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
             heuriFill = gsat->getHeuristicFill();
-            MPI_Isend(&heuriFill, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&heuriFill, 1, MPI_UNSIGNED, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
             heuriSolve = gsat->getHeuristicSolve();
-            MPI_Isend(&heuriSolve, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&heuriSolve, 1, MPI_UNSIGNED, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
             satisfFill = gsat->getNbSatisfiedClausesFill();
-            MPI_Isend(&satisfFill, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&satisfFill, 1, MPI_UNSIGNED, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
             satisfSolve = gsat->getNbSatisfiedClausesSolve();
-            MPI_Isend(&satisfSolve, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &finish);
+            MPI_Isend(&satisfSolve, 1, MPI_UNSIGNED, DISPLAY_RANK, 0, MPI_COMM_WORLD, &finish);
         }
     }
 
-    //L'affichage est fait par le processus de rank 0
-    if(world_rank == 0) {
+    //L'affichage est fait par le processus un seul processus
+    if(world_rank == DISPLAY_RANK) {
         //Attend las infos venants de processus qui à trouvé
-        int pid, rank, nbIte, heuriFill, heuriSolve, satisfFill, satisfSolve;
+        int pid, rank;
+        double time;
+        unsigned int nbIte, heuriFill, heuriSolve, satisfFill, satisfSolve;
         MPI_Recv(&pid, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
         MPI_Recv(&rank, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        MPI_Recv(&nbIte, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        MPI_Recv(&heuriFill, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        MPI_Recv(&heuriSolve, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        MPI_Recv(&satisfFill, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        MPI_Recv(&satisfSolve, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        MPI_Recv(&time, 1, MPI_DOUBLE, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        MPI_Recv(&nbIte, 1, MPI_UNSIGNED, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        MPI_Recv(&heuriFill, 1, MPI_UNSIGNED, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        MPI_Recv(&heuriSolve, 1, MPI_UNSIGNED, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        MPI_Recv(&satisfFill, 1, MPI_UNSIGNED, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        MPI_Recv(&satisfSolve, 1, MPI_UNSIGNED, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
         //Attend pour que tous les autres porcessus se termine
         sleep(1);
         //Affiche le resultat
         printf("------------------------------------------------------------------------------------------------------\n");
         printf(GREEN);
-        printf("s %s\n",end?"SATISFIABLE":"NOT FOUND");
+        printf("s SATISFIABLE\n");
         printf(YELLOW);
-        printf("c real time : %.4f seconds\n", gsat->realTime() - startTime);
+        printf("c real time : %.4f seconds\n", time);
         printf("c [pid:%6d][process:%2d][iteration:%4d][fill:%d][heuristic:%d]Satisfied clauses (begin: %d)(end:%d)\n",
             pid,
             rank,