Cho đến nay, ứng dụng của tôi đang đọc trong một tệp txt với một danh sách các số nguyên. Các số nguyên này cần phải được lưu trữ trong một mảng bằng quy trình tổng thể, tức là bộ vi xử lý có thứ hạng 0. Điều này hoạt động tốt.MPI_Scatter và MPI_Gather được sử dụng như thế nào từ C?
Bây giờ, khi tôi chạy chương trình, tôi có một câu lệnh if kiểm tra xem đó là quy trình chính và nếu có, tôi đang thực hiện lệnh MPI_Scatter
.
Từ những gì tôi hiểu điều này sẽ chia nhỏ mảng bằng các số và chuyển nó sang các quy trình phụ, tức là tất cả có xếp hạng> 0. Tuy nhiên, tôi không chắc chắn cách xử lý MPI_Scatter
. Làm thế nào để quá trình nô lệ "đăng ký" để có được mảng phụ? Làm thế nào tôi có thể nói cho các quy trình không chính để làm điều gì đó với mảng phụ?
Có thể ai đó vui lòng cung cấp một ví dụ đơn giản để chỉ cho tôi cách thức quy trình tổng thể gửi các phần tử từ mảng và sau đó có nô lệ thêm tổng và trả lại giá trị này cho tổng thể và in ra?
Mã của tôi cho đến nay:
#include <stdio.h>
#include <mpi.h>
//A pointer to the file to read in.
FILE *fr;
int main(int argc, char *argv[]) {
int rank,size,n,number_read;
char line[80];
int numbers[30];
int buffer[30];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
fr = fopen ("int_data.txt","rt"); //We open the file to be read.
if(rank ==0){
printf("my rank = %d\n",rank);
//Reads in the flat file of integers and stores it in the array 'numbers' of type int.
n=0;
while(fgets(line,80,fr) != NULL) {
sscanf(line, "%d", &number_read);
numbers[n] = number_read;
printf("I am processor no. %d --> At element %d we have number: %d\n",rank,n,numbers[n]);
n++;
}
fclose(fr);
MPI_Scatter(&numbers,2,MPI_INT,&buffer,2,MPI_INT,rank,MPI_COMM_WORLD);
}
else {
MPI_Gather (&buffer, 2, MPI_INT, &numbers, 2, MPI_INT, 0, MPI_COMM_WORLD);
printf("%d",buffer[0]);
}
MPI_Finalize();
return 0;
}
Thật là một câu trả lời tuyệt vời. Làm cho nó rất thẳng về phía trước và tôi thấy nó hoạt động như thế nào bây giờ. Tôi đã phạm sai lầm khi không nghĩ về nó như là các hoạt động tập thể. Cảm ơn rất nhiều! – DSF
Thật tuyệt vời! Bạn đã cứu ngày của tôi, Chúc mừng. Cảm ơn bạn – irobo
Hữu ích hơn hầu hết các phần giới thiệu MPI – WakaChewbacca