अभी तक, मेरा आवेदन पूर्णांक की सूची के साथ एक txt फ़ाइल में पढ़ रहा है। इन पूर्णांकों को मास्टर प्रोसेस i.e. प्रोसेसर द्वारा रैंक 0 के साथ सरणी में संग्रहीत करने की आवश्यकता है। यह ठीक काम कर रहा है।MPI_Scatter और MPI_Gather सी से कैसे उपयोग किए जाते हैं?
अब, जब मैं प्रोग्राम चलाता हूं तो मेरे पास एक कथन कथन है कि यह मास्टर प्रक्रिया है और यदि यह है, तो मैं MPI_Scatter
कमांड निष्पादित कर रहा हूं।
जो मैं समझता हूं उससे सरणी को संख्याओं के साथ विभाजित कर देगा और इसे गुलाम प्रक्रियाओं में भेज दिया जाएगा यानी सभी रैंक> 0 के साथ। हालांकि, मुझे यकीन नहीं है कि MPI_Scatter
को कैसे संभालें। उप-सरणी प्राप्त करने के लिए दास "सब्सक्राइब" प्रक्रिया कैसे करता है? उप-सरणी के साथ कुछ करने के लिए मैं गैर-मास्टर प्रक्रियाओं को कैसे बता सकता हूं?
क्या कोई मुझे यह दिखाने के लिए एक सरल उदाहरण प्रदान कर सकता है कि मास्टर प्रक्रिया सरणी से तत्व कैसे भेजती है और उसके बाद दास राशि जोड़ते हैं और इसे मास्टर को वापस कर देते हैं, जो सभी रकम को एक साथ जोड़ता है और इसे प्रिंट करता है?
मेरे कोड अब तक:
#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;
}
क्या एक उत्कृष्ट जवाब
तो यहाँ एक सरल उदाहरण (अपडेट किया गया इकट्ठा शामिल करने के लिए) है। इसे बहुत सीधे आगे बढ़ाया और मैं देखता हूं कि यह अब कैसे काम करता है। मैंने सामूहिक परिचालन के रूप में इसके बारे में सोचने की गलती की। बहुत बहुत धन्यवाद! – DSF
वाह! आपने मेरा दिन बचाया, चीयर्स। धन्यवाद – irobo
अधिकतर एमपीआई इंट्रोस से अधिक उपयोगी – WakaChewbacca