我是一个mpi新手。我正在尝试将我的代码与mpi并行化(需要更快地运行一些实验)。它应该像这样工作:master向从服务器发送一个字符串数组,它们完成一些工作并将status_ready发送回主服务器。当所有从站都准备就绪时,主站进入循环并迭代地向从站发送双向量,从站处理该向量并将其结果(2个向量)发送回主站。当收到所有tje消息时,master将处理它并且循环迭代(master将结果发送给slave,等等)它应该像这样工作
// master - init
sendVectorWithStrings2Slaves();
// slaves
doSomeStuff();
sendReady();
// master
receiveStatuses();
// master - when all slaves are ready
while(some condition)
{
// master
sendVector2Slaves()
//slaves
receiveVector();
process();
sendTwoVectorsBack2Master();
// master
receiveAllVectors();
checkThatAllMessagesReceived();
processResults();
}
stopSlaves();
任何人都可以用mpi帮助我吗?
答案 0 :(得分:0)
您的伪代码的一些准则可以在下面找到:
int myrank,ntasks;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
if (myrank == 0) {
// master - init
for (int rank = 1; rank < ntasks; ++rank)
sendVectorWithStrings2Slave(rank);
for (int rank = 1; rank < ntasks; ++rank)
recieveReady();
} else {
// slaves
recieveVectorWithStringsFromMaster();
doSomeStuff();
sendReady();
}
// master - when all slaves are ready
while(some condition)
{
if (myrank == 0) {
// master
for (int rank = 1; rank < ntasks; ++rank)
sendVector2Slave(rank)
// master
for (int rank = 1; rank < ntasks; ++rank)
receiveVector();
processResults();
} else {
//slaves
receiveVector();
process();
sendTwoVectorsBack2Master();
}
}