int outMode=MPI_MODE_CREATE|MPI_MODE_WRONLY; \r
int inMode=MPI_MODE_RDONLY; \r
\r
- char* outAlignFilename = new char[alignFileName.length()];\r
- memcpy(outAlignFilename, alignFileName.c_str(), alignFileName.length());\r
-\r
- char* outReportFilename = new char[reportFileName.length()];\r
- memcpy(outReportFilename, reportFileName.c_str(), reportFileName.length());\r
+ //char* outAlignFilename = new char[alignFileName.length()];\r
+ //memcpy(outAlignFilename, alignFileName.c_str(), alignFileName.length());\r
+ \r
+ char outAlignFilename[1024];\r
+ strcpy(outAlignFilename, alignFileName.c_str());\r
\r
- char* outAccnosFilename = new char[accnosFileName.length()];\r
- memcpy(outAccnosFilename, accnosFileName.c_str(), accnosFileName.length());\r
+ //char* outReportFilename = new char[reportFileName.length()];\r
+ //memcpy(outReportFilename, reportFileName.c_str(), reportFileName.length());\r
+ \r
+ char outReportFilename[1024];\r
+ strcpy(outReportFilename, reportFileName.c_str());\r
\r
- char* inFileName = new char[candidateFileNames[s].length()];\r
- memcpy(inFileName, candidateFileNames[s].c_str(), candidateFileNames[s].length());\r
+ //char* outAccnosFilename = new char[accnosFileName.length()];\r
+ //memcpy(outAccnosFilename, accnosFileName.c_str(), accnosFileName.length());\r
+ \r
+ char outAccnosFilename[1024];\r
+ strcpy(outAccnosFilename, accnosFileName.c_str());\r
\r
+ //char* inFileName = new char[candidateFileNames[s].length()];\r
+ //memcpy(inFileName, candidateFileNames[s].c_str(), candidateFileNames[s].length());\r
+ \r
+ char inFileName[1024];\r
+ strcpy(inFileName, candidateFileNames[s].c_str());\r
+ \r
MPI_File_open(MPI_COMM_WORLD, inFileName, inMode, MPI_INFO_NULL, &inMPI); //comm, filename, mode, info, filepointer\r
MPI_File_open(MPI_COMM_WORLD, outAlignFilename, outMode, MPI_INFO_NULL, &outMPIAlign);\r
MPI_File_open(MPI_COMM_WORLD, outReportFilename, outMode, MPI_INFO_NULL, &outMPIReport);\r
MPI_File_open(MPI_COMM_WORLD, outAccnosFilename, outMode, MPI_INFO_NULL, &outMPIAccnos);\r
\r
- delete outAlignFilename;\r
- delete inFileName;\r
- delete outReportFilename;\r
- delete outAccnosFilename;\r
-\r
if (m->control_pressed) { MPI_File_close(&inMPI); MPI_File_close(&outMPIAlign); MPI_File_close(&outMPIReport); MPI_File_close(&outMPIAccnos); return 0; }\r
\r
if (pid == 0) { //you are the root process \r
MPIPos = setFilePosFasta(candidateFileNames[s], numFastaSeqs); //fills MPIPos, returns numSeqs\r
\r
//send file positions to all processes\r
- MPI_Bcast(&numFastaSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD); //send numSeqs\r
- MPI_Bcast(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //send file pos \r
+ for(int i = 1; i < processors; i++) { \r
+ MPI_Send(&numFastaSeqs, 1, MPI_INT, i, tag, MPI_COMM_WORLD);\r
+ MPI_Send(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, i, tag, MPI_COMM_WORLD);\r
+ }\r
\r
//figure out how many sequences you have to align\r
numSeqsPerProcessor = numFastaSeqs / processors;\r
- if(pid == (processors - 1)){ numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor; }\r
int startIndex = pid * numSeqsPerProcessor;\r
+ if(pid == (processors - 1)){ numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor; }\r
+ \r
\r
//align your part\r
driverMPI(startIndex, numSeqsPerProcessor, inMPI, outMPIAlign, outMPIReport, outMPIAccnos, MPIPos);\r
if (tempResult != 0) { MPIWroteAccnos = true; }\r
}\r
}else{ //you are a child process\r
- MPI_Bcast(&numFastaSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD); //get numSeqs\r
+ MPI_Recv(&numFastaSeqs, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);\r
MPIPos.resize(numFastaSeqs+1);\r
- MPI_Bcast(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //get file positions\r
+ MPI_Recv(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, 0, tag, MPI_COMM_WORLD, &status);\r
+\r
\r
//figure out how many sequences you have to align\r
numSeqsPerProcessor = numFastaSeqs / processors;\r
- if(pid == (processors - 1)){ numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor; }\r
int startIndex = pid * numSeqsPerProcessor;\r
+ if(pid == (processors - 1)){ numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor; }\r
+ \r
\r
//align your part\r
driverMPI(startIndex, numSeqsPerProcessor, inMPI, outMPIAlign, outMPIReport, outMPIAccnos, MPIPos);\r