0
Hallo Iam試圖用C語言編寫一個simlpe parralel程序,使用MPI。程序應該在數組中找到最大值。根進程應該使用MPI_Scatter向所有進程發送數組塊,然後通過MPI_Gather收集結果。當我運行程序我得到普遍的錯誤是這樣的:MPI_Scatter和MPI_Gather不工作
也許這Unix的錯誤信息會有所幫助: 的Unix錯誤號:14個 錯誤地址
我知道,有一些問題,MPI_Scatter和MPI_Gather或與我發送給這個函數的值。
我試圖找到解決方案,但我什麼也沒找到有用的東西。
這裏是我的代碼:
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 9
int max(int *buf, int N){
int i;
int value = 0;
for(i=0; i<N; i++){
if (buf[i]>value){
value = buf[i];
}
}
return value;
}
int main(int argc, char** argv)
{ int size, rank;
int slave;
int *buf;
int *buf1;
int *buf2;
int i, n, value;
MPI_Status status;
/* Initialize MPI */
MPI_Init(NULL, NULL);
/*
* Determine size in the world group.
*/
MPI_Comm_size(MPI_COMM_WORLD, &size);
if ((BUFSIZE % size) != 0) {
printf("Wrong Bufsize ");
return(0);
}
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank==0) {
buf = (int *)malloc(BUFSIZE*sizeof(int));
buf2 = (int *)malloc(size*sizeof(int));
printf("\n Generated array: \n");
for(i=0; i<BUFSIZE; i++){
buf[i] = rand() % 20;
printf("%d, ", buf[i]);
}
printf("\n");
printf("\n Sending values to processes:");
printf("\n -----------------------------");
}
buf1 = (int *)malloc((BUFSIZE/size)*sizeof(int));
MPI_Scatter(buf, BUFSIZE/size, MPI_INT, buf1, BUFSIZE/size, MPI_INT, 0, MPI_COMM_WORLD);
value = max(&buf1[0], BUFSIZE/size);
printf("\n Max from rocess %d : %d \n", rank, max(&buf1[0], BUFSIZE/size));
MPI_Gather(&value, 1, MPI_INT, buf2, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (rank == 0){
printf("\n Max value: %d", max(&buf2[0], size));
}
MPI_Finalize();
return(0);
}
在最後一個'printf'語句內的'max()'第二次調用中缺少某些內容。 –
最後一個'printf'語句也缺少%d。 – Dusty
你是對的,但它在複製代碼的過程中必須丟失。我可以編譯程序沒有任何問題,但我不能跑它。 –