c - 进程之一的 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();
}
解决方案
推荐阅读
- python - 在 google colab 中导入的问题
- python - 从具有多个条件的 pandas 数据帧中匹配、替换和提取子字符串的最快方法是什么?
- cross-compiling - 添加 libusb 库并包含到我的交叉编译器中
- yaml - 如何使用 YamlDotNet 反序列化 yaml 文件中的键/值对列表
- node.js - Firebase Cloud Functions Cron Async Func 多次调用
- authentication - 无法通过 axios 发送图像上传和使用令牌承载身份验证
- ruby-on-rails - 删除使用 has_and_belongs_to 关联的记录时,如何解决无效语句?
- wordpress - 让 WordPress 在两个不同的 url 模式上显示相同的页面
- javascript - 从 ReactJS 调用 Javascript 抛出窗口引用错误
- watson-conversation - 将应用程序部署到 IBM Bluemix 的域时出错