【发布时间】:2016-01-31 13:24:03
【问题描述】:
我最近才知道 MPI_Send 一次不能发送太长的数据,所以我决定将数据分成几部分,然后在 for 循环中发送。下面是一个测试用例。这里的问题是,如果我使用少量数据并将其分成几部分,程序就会运行;但是,当数据很长时,无论我把它分成多少块,程序都不会运行。当我运行它时,我只是听到我的电脑发出很大的噪音。所以我想知道是什么原因以及如何让 MPI_Send 将大型数据集发送到其他处理器。谢谢!
#include<iostream>
#include<mpi.h>
#include<vector>
using namespace std;
//This set of N and N+Parts won't work
#define N 1024*1024*5
#define N_PARTS 1000
//This works
#define N 1024*5
#define N_PARTS 10
#define MASTER 0
int main(int argc, char** argv)
{
int np, pid;
vector<int> arr;
for(int i=0; i<N; ++i) arr.push_back(i);
int LENGTH = N/N_PARTS;
int N_RES = N%N_PARTS;
// cout << LENGTH << endl;
// cout << N_RES << endl;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &np);
MPI_Comm_rank(MPI_COMM_WORLD, &pid);
for(int i=0; i< N_PARTS-1; ++i){
MPI_Send(&arr[0]+i*LENGTH,LENGTH,MPI_INT,MASTER,0,MPI_COMM_WORLD);
}
MPI_Send(&arr[0]+LENGTH*(N_PARTS-1),N_RES,MPI_INT,MASTER,0,MPI_COMM_WORLD);
MPI_Finalize();
}
【问题讨论】:
-
这是什么意思? “我刚刚听说我的电脑发出很大的噪音”
-
对 MPI_Recv 的调用在哪里?
-
我没有写 MPI_Recv()。只发不收不好吗?
-
当然不行。
-
我的意思是程序会卡在那里并且永远不会结束。但是计算机发出很大的噪音,这意味着里面有很多执行。