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ı newcomm
10, 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
Bu soruyu, bu değişkenlerin içeriği olmadan nasıl yanıtlayabiliriz? – Zulan
Bu konuda daha fazla bilgi eklendi –
Lütfen anlamlı soru başlıklarını kullanın. –