MPI_Send yoluyla bir int dizi gönderme

oy
0

Ben MPI yeniyim ve ben bir göndermek istiyorum intaracılığı diziyi MPI_Sendbaşka bir işlem için.

// Code example

      int main(int argc, char ** argv)
      {
       int * array;
       int tag=1;
       int size;
       int rank;
       MPI_Status status;
       MPI_Init (&argc,&argv);
       MPI_Comm_size (MPI_COMM_WORLD,&size);
       MPI_Comm_rank (MPI_COMM_WORLD,&rank);
       if (rank == 0)
       {
         array = malloc (10 * sizeof(int)); // Array of 10 elements
         if (!array) // error checking
         {
          MPI_Abort (MPI_COMM_WORLD,1);
         }
       MPI_Send(&array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
       }
       if (rank == 1)
       {
        MPI_Recv (&array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
        // more code here
       }
      MPI_Finalize();
// More code here

Ben üç şey sormak istiyorum.

  1. Bu başka bir süreç rütbesine dizisi göndermek için bir GÜVENLİ yolu mu?
  2. Bunun bir sözdizimi akıllıca doğru kullanımı mı MPI_Send()ve MPI_Recv()?
  3. Çok fazla sorun olmadan bir dizi göndermek ve almak için daha iyi bir yolu var mı?

Herhangi bir yardım takdir edilmektedir.

Oluştur 27/11/2018 saat 18:14
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

dinamik, gönderilenler dizi tahsis ve almak için yapacaksanız olacaktır:

MPI_Send(array,10,MPI_INT,1,tag,MPI_COMM_WORLD);

ve

MPI_Recv (array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);

(Bu dizi Not arrayolup &array)

Yorum önerilen olarak, MPI anlayışınız ancak C işaretçileri, kullanım yardımcı olabilir canlandırıcı iyi görünüyor.

Düzenleme: Gilles tarafından belirtildiği gibi, bir diziye veriyi alan tüm süreçler bellek onlar için tahsis olması gerekir. (Alıcı? Bunu yapmanın başka yolları da vardır nasıl dizi tahsis etmek büyük bilmesi için belki ancak o basit bir açıklama ilk veri boyutunu gönderme)

Cevap 11/12/2018 saat 21:47
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more