Şimdiye kadar, başvurum tamsayılar listesini içeren bir txt dosyasında okuyor. Bu tamsayılar, bir dizide ana işlemle yani işlemcinin sıra 0 ile saklanması gerekir. Bu iyi çalışıyor.MPI_Scatter ve MPI_Gather C'den nasıl kullanılır?
Şimdi, programı çalıştırdığımda, ana işlem olup olmadığını kontrol edersem bir if deyim var ve varsa MPI_Scatter
komutunu çalıştırıyorum. Bu sayılarla diziyi bölmek ve rütbe> 0 ile yani bütün köle süreçlerine dışarı geçecek anladığım
. Ancak, MPI_Scatter
'un nasıl işleneceğinden emin değilim. Alt-dizi almak için köle süreci nasıl "abone" olur? Ana olmayan süreçlere alt diziyle bir şeyler yapmasını nasıl söyleyebilirim?
Birisi, ana işlemin diziden öğeleri nasıl gönderdiklerini ve daha sonra kölenin toplamı nasıl eklediğini ve bunu tüm toplamları bir araya getiren ve basan master'a vermesini göstermek için basit bir örnek sağlayabilir mi? Bugüne kadar
Kodum:
#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;
}
Ne mükemmel cevap
Yani burada (toplamak dahil etmek Güncelleme ) basit bir örnek. Çok ileriye doğru yaptı ve şimdi nasıl çalıştığını görüyorum. Bunu kolektif operasyonlar olarak düşünmeme hatasını yaptım. Çok teşekkürler! – DSF
Vay! Günümü kurtardın Cheers. Teşekkürler – irobo
Çoğu MPI girişinden çoğundan daha yararlıdır – WakaChewbacca