]> git.donarmstrong.com Git - mothur.git/blobdiff - alignmentdb.cpp
pat's updates on 7/19/10
[mothur.git] / alignmentdb.cpp
index 1ea1b9803e16b306bc2ea9deeb310eeff1d5fc06..bf46bec168858853a58730fd80b4309798982fa6 100644 (file)
@@ -25,12 +25,14 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap
                m->mothurOut("Reading in the " + fastaFileName + " template sequences...\t");   cout.flush();\r
                \r
                #ifdef USE_MPI  \r
-                       int pid;\r
-                       vector<long> positions;\r
+                       int pid, processors;\r
+                       vector<unsigned long int> positions;\r
                \r
                        MPI_Status status; \r
                        MPI_File inMPI;\r
                        MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are\r
+                       MPI_Comm_size(MPI_COMM_WORLD, &processors);\r
+                       int tag = 2001;\r
        \r
                        char inFileName[1024];\r
                        strcpy(inFileName, fastaFileName.c_str());\r
@@ -41,12 +43,14 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap
                                positions = setFilePosFasta(fastaFileName, numSeqs); //fills MPIPos, returns numSeqs\r
 \r
                                //send file positions to all processes\r
-                               MPI_Bcast(&numSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD);  //send numSeqs\r
-                               MPI_Bcast(&positions[0], (numSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //send file pos     \r
+                               for(int i = 1; i < processors; i++) { \r
+                                       MPI_Send(&numSeqs, 1, MPI_INT, i, tag, MPI_COMM_WORLD);\r
+                                       MPI_Send(&positions[0], (numSeqs+1), MPI_LONG, i, tag, MPI_COMM_WORLD);\r
+                               }\r
                        }else{\r
-                               MPI_Bcast(&numSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD); //get numSeqs\r
+                               MPI_Recv(&numSeqs, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);\r
                                positions.resize(numSeqs+1);\r
-                               MPI_Bcast(&positions[0], (numSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //get file positions\r
+                               MPI_Recv(&positions[0], (numSeqs+1), MPI_LONG, 0, tag, MPI_COMM_WORLD, &status);\r
                        }\r
                \r
                        //read file \r
@@ -73,7 +77,9 @@ AlignmentDB::AlignmentDB(string fastaFileName, string s, int kmerSize, float gap
                                        if (temp.getUnaligned().length() > longest)  { longest = temp.getUnaligned().length()+1; }\r
                                }\r
                        }\r
-               \r
+                       \r
+                       MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case\r
+                       \r
                        MPI_File_close(&inMPI);\r
                \r
        #else\r
@@ -194,65 +200,6 @@ Sequence AlignmentDB::findClosestSequence(Sequence* seq) {
                exit(1);\r
        }\r
 }\r
-#ifdef USE_MPI \r
-/**************************************************************************************************/\r
-int AlignmentDB::MPISend(int receiver) {\r
-       try {\r
-               \r
-               //send numSeqs - int\r
-               MPI_Send(&numSeqs, 1, MPI_INT, receiver, 2001, MPI_COMM_WORLD); \r
-                                                                       \r
-               //send longest - int\r
-               MPI_Send(&longest, 1, MPI_INT, receiver, 2001, MPI_COMM_WORLD); \r
-       \r
-               //send templateSequences\r
-               for (int i = 0; i < templateSequences.size(); i++) {\r
-                       templateSequences[i].MPISend(receiver);\r
-               }\r
-               \r
-               //send Database\r
-               search->MPISend(receiver);\r
-               \r
-               return 0;\r
-       }\r
-       catch(exception& e) {\r
-               m->errorOut(e, "AlignmentDB", "MPISend");\r
-               exit(1);\r
-       }\r
-}\r
-/**************************************************************************************************/\r
-int AlignmentDB::MPIRecv(int sender) {\r
-       try {\r
-               MPI_Status status;\r
-               //receive numSeqs - int\r
-               MPI_Recv(&numSeqs, 1, MPI_INT, sender, 2001, MPI_COMM_WORLD, &status);\r
-               \r
-               //receive longest - int\r
-               MPI_Recv(&longest, 1, MPI_INT, sender, 2001, MPI_COMM_WORLD, &status);\r
-\r
-               //receive templateSequences\r
-               templateSequences.resize(numSeqs);\r
-               for (int i = 0; i < templateSequences.size(); i++) {\r
-                       templateSequences[i].MPIRecv(sender);\r
-               }\r
-\r
-               //receive Database\r
-               search->MPIRecv(sender);\r
-       \r
-               for (int i = 0; i < templateSequences.size(); i++) {\r
-                       search->addSequence(templateSequences[i]);\r
-               }\r
-               search->generateDB();\r
-               search->setNumSeqs(numSeqs);\r
-\r
-               return 0;\r
-       }\r
-       catch(exception& e) {\r
-               m->errorOut(e, "AlignmentDB", "MPIRecv");\r
-               exit(1);\r
-       }\r
-}\r
-#endif\r
 /**************************************************************************************************/\r
 \r
 \r