]> git.donarmstrong.com Git - mothur.git/blobdiff - chimera.cpp
added cluster.split command
[mothur.git] / chimera.cpp
index b513075b4782167ce3f14b74df4f31a6f76b9529..483e5530b094ce011a1e8894a6160a9ea60f2361 100644 (file)
@@ -101,13 +101,15 @@ vector<Sequence*> Chimera::readSeqs(string file) {
                m->mothurOut("Reading sequences from " + file + "..."); cout.flush();
                
                #ifdef USE_MPI  
-                       int pid;
+                       int pid, processors;
                        vector<long> positions;
                        int numSeqs;
+                       int tag = 2001;
                
                        MPI_Status status; 
                        MPI_File inMPI;
                        MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are
+                       MPI_Comm_size(MPI_COMM_WORLD, &processors);
 
                        //char* inFileName = new char[file.length()];
                        //memcpy(inFileName, file.c_str(), file.length());
@@ -122,12 +124,14 @@ vector<Sequence*> Chimera::readSeqs(string file) {
                                positions = setFilePosFasta(file, numSeqs); //fills MPIPos, returns numSeqs
 
                                //send file positions to all processes
-                               MPI_Bcast(&numSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD);  //send numSeqs
-                               MPI_Bcast(&positions[0], (numSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //send file pos     
+                               for(int i = 1; i < processors; i++) { 
+                                       MPI_Send(&numSeqs, 1, MPI_INT, i, tag, MPI_COMM_WORLD);
+                                       MPI_Send(&positions[0], (numSeqs+1), MPI_LONG, i, tag, MPI_COMM_WORLD);
+                               }
                        }else{
-                               MPI_Bcast(&numSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD); //get numSeqs
+                               MPI_Recv(&numSeqs, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);
                                positions.resize(numSeqs+1);
-                               MPI_Bcast(&positions[0], (numSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //get file positions
+                               MPI_Recv(&positions[0], (numSeqs+1), MPI_LONG, 0, tag, MPI_COMM_WORLD, &status);
                        }
                        
                        //read file 
@@ -157,6 +161,7 @@ vector<Sequence*> Chimera::readSeqs(string file) {
                        }
                        
                        MPI_File_close(&inMPI);
+                       MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case
        #else
 
                ifstream in;