2016-04-10 17 views
-1

Birisi bana MPI_Comm_split Communicator hakkında daha fazla bilgi anlatabilir mi?MPI_Comm_split Açıklama

MPI_Comm_split(MPI_COMM_WORLD, my_row, my_rank,&my_row_comm); 

Bu sadece bazı temel belgeleri okuyarak tanıştığım bir örnektir. Belki birisi bana bu iletişimcinin nasıl çalıştığını söyleyebilirdi?

+0

Bu soruyu, bu değişkenlerin içeriği olmadan nasıl yanıtlayabiliriz? – Zulan

+0

Bu konuda daha fazla bilgi eklendi –

+0

Lütfen anlamlı soru başlıklarını kullanın. –

cevap

2

Sadece man sayfasına bir göz atalım, başlamak için:

MPI_Comm_split(3)      MPI     MPI_Comm_split(3) 

NAME 
     MPI_Comm_split - Creates new communicators based on colors and keys 

SYNOPSIS 
     int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) 

INPUT PARAMETERS 
     comm - communicator (handle) 
     color - control of subset assignment (nonnegative integer). Processes 
       with the same color are in the same new communicator 
     key - control of rank assignment (integer) 

OUTPUT PARAMETERS 
     newcomm 
       - new communicator (handle) 

Yani bu ne yapıyor?
Adından da anlaşılacağı gibi, Communicator comm'u disjoint alt iletişim cihazları newcomm'a bölecektir. Her bir comm süreci bu alt iletişimcilerden bir tanesine dönüşecek, dolayısıyla newcomm çıkışının sadece bir tek iletişimci olduğu (mevcut işlem için). Ancak, global olarak konuşursak, newcomm'un birçok versiyonunun comm girişini bölen farklı alt iletişimciler olduğunu anlamalısınız.

Yani, işlev budur. Ama bunu nasıl yapıyor?

  • color hangisinin geçerli süreç düşecek alt iletişimcileri karar vermek izin bir tamsayı değeridir: iki parametre color ve key devreye giriyor
    Eh, bu. Daha spesifik olarak, color'un aynı sayısal değere sahip olduğu comm tüm süreçleri aynı alt iletişimci newcomm'un parçası olacaktır. Örneğin, color = rank%2; (rank ile comm'daki işlemin sırası) tanımlamak için iki yeni iletişimciyi (genel olarak) oluşturacak olursunuz: biri tek tek sıralar için, diğeri bile sıralar için. Bununla birlikte, her bir sürecin yalnızca bu yeni iletişimcilerden birinin parçası olduğunu göreceklerini unutmayın ... Özetle, color, jarse futbolunun rengi gibi yaratacağınız çeşitli "takımları" ayırt etmeyi sağlar. Takımlar, maç sırasında kendilerini ayırt etmek için giyeceklerdir (bu yüzden, tahmin ettiğim adlandırma).
  • key yalnızca, işlemlerin bir parçası oldukları yeni iletişimcilere nasıl sıralanacağına isteğe bağlı olarak karar verecektir. Örneğin, key = rank; değerini ayarlarsanız, newcomm numaralı her bir iletişim kutusunda numaralı sıralaması (sıralamanın kendisi değil) sırası newcomm10, orijinal iletişimci comm'daki sıralama sırasını izleyecektir. Eğer sipariş umurumda değil Ama eğer ... Nihayet

siz de key=0; ayarlayabilir ve yeni iletişimcileri her birinde sıralama kütüphane karar verirse versin olacak, iki önemsiz örnekler:

  • MPI_Comm_split(comm, 0, rank, &newcomm) sadece (sadece MPI_Comm_dup() gibi) newcomm içine comm iki katına çıkarır
  • MPI_Comm_split(comm, rank, rank, &newcomm) sadece proseslerin her biri için MPI_COMM_SELF eşdeğer bir döner