【发布时间】:2016-02-20 05:27:34
【问题描述】:
我是 MPI 新手,我正在尝试编写使用 MPI_scatter 的程序。我有 4 个节点(0、1、2、3)。 Node0 是主节点,其他节点是从节点。 Master 向用户询问要发送给从机的数组元素的数量。然后它创建一个大小为元素数量 * 4 的数组。然后每个节点打印它的结果。
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#define MASTER 0
int main(int argc, char **argv) {
int id, nproc, len, numberE, i, sizeArray;
int *arrayN=NULL;
int arrayNlocal[sizeArray];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (id == MASTER){
printf("Enter number of elements: ");
scanf("%d", &numberE);
sizeArray = numberE * 4;
arrayN = malloc(numberE * sizeof(int));
for (i = 0; i < sizeArray; i++){
arrayN[i] = i + 1;
}
}
MPI_Scatter(arrayN, numberE, MPI_INT, &arrayNlocal, numberE,MPI_INT, MPI_COMM_WORLD);
printf("Node %d has: ", id);
for (i = 0; i < numberE; i++){
printf("%d ",arrayNlocal[i]);
}
MPI_Finalize();
return 0;
}
我得到了错误:
BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
PID 9278 RUNNING AT 192.168.100.100
EXIT CODE: 139
CLEANING UP REMAINING PROCESSES
YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
【问题讨论】:
-
arrayN应该是int*而不是int和arrayN = i + 1;应该是arrayN[i] = i + 1;。 -
其实我是这样的,我只是在重写代码时犯了一个错误,因为我的节点是 vm。我认为问题出在 numberE 上,因为如果我将 numberE 更改为 2 并且输入为 2,则代码有效