我需要还原节点从其他节点获取元素列表(存储在向量中)的副本。我定义了我自己的减少功能,但它不起作用。该程序终止/崩溃。传递并推入MPI_Reduce中的向量
这是代码:
#include <iostream>
#include "mpi.h"
#include <vector>
using namespace std;
void pushTheElem(vector<int>* in, vector<int>* inout, int *len, MPI_Datatype *datatype)
{
vector<int>::iterator it;
for (it = in->begin(); it < in->end(); it++)
{
inout->push_back(*it);
}
}
int main(int argc, char **argv)
{
int numOfProc, procID;
vector<int> vect, finalVect;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numOfProc);
MPI_Comm_rank(MPI_COMM_WORLD, &procID);
MPI_Op myOp;
MPI_Op_create((MPI_User_function*)pushTheElem, true, &myOp);
for (int i = 0; i < 5; i++)
{
vect.push_back(procID);
}
MPI_Reduce(&vect, &finalVect, 5, MPI_INT, myOp, 0, MPI_COMM_WORLD);
if (procID == 0)
{
vector<int>::iterator it;
cout << "Final vector elements: " << endl;
for (it = finalVect.begin(); it < finalVect.end(); it++)
cout << *it << endl;
}
MPI_Finalize();
return 0;
}
请提供有关崩溃的一些细节。至少应该有某种异常发生......程序的输出是什么? –
这就是我得到的:工作中止:[等级]消息。没有调用finalize,退出[0]进程。 [1]终止。 ----错误分析----- testMPI.exe过早结束并可能崩溃。退出代码0xc0000005。 – Jack
当我用2个进程运行程序时,我知道了。 – Jack