【发布时间】:2016-09-12 07:37:36
【问题描述】:
我编写了一个小程序,我将一些随机值从我的主进程发送到从属进程。奴隶正在计算小等式,他们应该将结果发回给主人。现在 master 应该以正确的顺序将结果放入新的结果数组中。我使用消息标签。 方法如下:
将我的任务列表中的一个元素发送给奴隶
void Ccalculation::masterSend(int * tasklist)
{
for (int i = 1; i < this->world_size; i++) {
MPI_Send(&tasklist[current], 1, MPI_INT, i, current, MPI_COMM_WORLD);
current++;
}
}
slave从master接收任务
void Ccalculation::slaceRecv()
{
MPI_Status status;
MPI_Recv(&slaveTask, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
//here I am creating variable whith tag which I ll be returning
msgTag = status.MPI_TAG;
cout << "msg tag: " << status.MPI_TAG << " number " << slaveTask << endl;
}
问题从这里开始
将解决方案发送给带有特定标签的大师
void Ccalculation::slaveSend(double solution)
{
MPI_Send(&solution, 1, MPI_DOUBLE, 0, msgTag, MPI_COMM_WORLD);
}
master 接收解决方案并将其放入 solutionArray
void Ccalculation::masterRecv(double *solutionTab)
{
double buffer = 0;
MPI_Status status;
for (size_t i = 0; i < this->world_size; i++)
{
MPI_Recv(&buffer, 1, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
solutionTab[status.MPI_TAG] = buffer;
}
}
【问题讨论】:
-
运行代码时究竟出现了什么问题?您是否在
masterSend中初始化current = 0?
标签: c++ mpi communication