使用MPI和C ++发送静态存储器2D阵列

时间:2014-02-02 22:10:38

标签: c++ mpi

使用MPI发送数组时遇到一些问题。我目前有一个名为静态内存位置的数组。我以递归的方式逐渐填充数组。最后,我将阵列发送到从处理器以完成填充。

const int SIZE = 8;
const int DEPTH = 3 ;

void recursion(int column, int positions[SIZE], int rank, int numtasks) {
  //other code
  positions[DEPTH] = row;
  MPI_Send(&positions, SIZE, MPI_INT, r, 1, MPI::COMM_WORLD) ;
  //other code }

int main() {
  int positions[SIZE];
  MPI::Init();
  rank = MPI::COMM_WORLD.Get_rank();
  numtasks = MPI::COMM_WORLD.Get_size();
  char name[MPI::MAX_PROCESSOR_NAME];
  memset(name,0,MPI::MAX_PROCESSOR_NAME);
  MPI::Get_processor_name(name,len);
  memset(name+len,0,MPI::MAX_PROCESSOR_NAME-len);
  if(rank == MASTER) {
    recursion(0, positions, rank, numtasks); }
  if(rank != MASTER) {
  MPI_Recv(&positions, SIZE, MPI_INT, 0, MPI::ANY_TAG, MPI::COMM_WORLD, &stat);

使用cout函数,我设法发现发送前的位置数组是:

0 2 4 0 1055625616 32621 4252832 0 

第二个0之后的数字是我尚未填充的数组点。但recv之后的位置数组是:

-196000928 32767 -196001336 3 -1769860728 54 1047301632 32621 

即使我在主处理器上更改阵列上的数字,从站也始终接收相同的阵列。

谁能告诉我哪里出错了,以及如何解决这些阵列?

1 个答案:

答案 0 :(得分:0)

错误在行MPI_Send(&positions, SIZE, MPI_INT, r, 1, MPI::COMM_WORLD);中。您不应该使用&positions而是使用positionspositions类型为int *,因此&positions类型为int **,您实际上只是在这种情况下发送垃圾而不是真实数组。