首页 > 解决方案 > 进程之一的 MPI 错误终止退出代码:139

问题描述

任务是二维矩阵乘法。N 是数据大小,P 是处理器数量。dn029 是我的远程主机。我测试了这个代码的多个 Ps,我得到一个代码 139 或 11 错误。我收到的错误消息:您的一个应用程序进程的错误终止 = PID 147347 在 dn029 运行 = 退出代码:139

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<mpi.h>

int P;
int N = 1024;

/*Single Row, Single Column Matrix Multiplication Function*/
float row_col_multi(float* row, float* col){
  int i0;
  float c0;
  for(i0 = 0; i0 < N ; i0++)
    c0 += row[i0]*col[i0];
  return c0;
}


int main(int argc, char *argv[]){

  MPI_Init(&argc, &argv);
  int i, j, k, rank, size;
  double start, end, total;
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Request request[2];
  P = size;

  float A_row [N];
  float B_col [N];
  float matrix_C[N][N];
  float matrix_A[N][N];
  float matrix_BT[N][N];

  if(rank == 0){
    double wall_time;
    for(i = 0; i < N; i++)
      for (j = 0; j < N; j++)
        matrix_A[i][j] = -1+2*((float)rand())/RAND_MAX;

    for(i = 0; i < N; i++)
      for (j = 0; j < N; j++)
        matrix_BT[i][j] = -1+2*((float)rand())/RAND_MAX;

  }
  start = MPI_Wtime();

  if(rank == 0)
    printf("Root processor %d: Scatterring is started for diagonal elements...\n", rank);

  for(i = 0; i < N/P ; i++){
    MPI_Iscatter(matrix_A[rank + P*i], N, MPI_FLOAT, A_row, N, MPI_FLOAT, 0, MPI_COMM_WORLD, &request[0]);
    MPI_Iscatter(matrix_BT[rank + P*i], N, MPI_FLOAT, B_col, N, MPI_FLOAT, 0, MPI_COMM_WORLD, &request[1]);
    MPI_Waitall(2,request, MPI_STATUSES_IGNORE);

    matrix_C[rank + P*i][rank + P*i] = row_col_multi(A_row, B_col);
  }

  for(i = 1 ; i < N ; i++){

      if(rank < i){
         for(k = 0; k < N/P ; k++){
          MPI_Iscatter(matrix_A[rank+i + P*k], N, MPI_FLOAT, A_row, N, MPI_FLOAT, 0, MPI_COMM_WORLD, &request[0]);
          MPI_Iscatter(matrix_BT[rank + P*k], N, MPI_FLOAT, B_col, N, MPI_FLOAT, 0, MPI_COMM_WORLD, &request[1]);
          MPI_Waitall(2,request, MPI_STATUSES_IGNORE);

         matrix_C[rank+i + P*k][rank + P*k] = row_col_multi(A_row, B_col);
        }
      }
  }
  end = MPI_Wtime();
  printf("Total Time: %f\n", end - start);



  MPI_Finalize();
}

标签: cmpi

解决方案


推荐阅读