MPI

2013-04-09 17 views
5

'da "atomik" bir çağrı çağrısı OpenMPI içinde bir atomik çağrının stdout'a (veya herhangi bir akışa) yazılması için bir komut veya teknik olup olmadığıyla ilgileniyorum.MPI

Dikkat ettiğim şey, MPI programlarının yürütülmesi sırasında, kodun (veya diğer akışların) yazılmasına yönelik çağrıların, her bir kodun belirli bir kod bölümüne geldiğinde yazabileceği gibi, kafa karıştırıcı hale gelebileceğidir. Sonuçları raporlarken, konuyu kafa karıştırıcı birkaç prova tarafından bir satır yazılabilir.

//Proc 10 - results calculated somewhere above 
// result1 = 10 
// result2 = 11 
cout << "My results are: " << result1 << " " << resul2 << endl; 

ve: Yani 2 farklı procs böyle bir şey yapabilir

//Proc 20 - results calculated somewhere above 
// result1 = 20 
// result2 = 21 
cout << "My results are: " << result1 << " " << resul2 << endl; 

Ama sonuç olabilir:

My results are: 20 My results are: 10 11 21 

Ne aradığım bir gibi bir şey " "ya da" atomik cout'u bloke etme (dosya akışları gibi diğer akışlara yazmanın yanı sıra). Bu yüzden, bir cout'u yazmaya başladığımda, ifadenin sonuna kadar veya akışa bir bitiş veya bitiş akışı verilene kadar engellenir. Bu durumda olsaydı, (tabii ki, hala ilk gelirdi hangi hattı bilemeyiz ama) 2 satır ayrı olacağını garanti ediyorum:

My results are: 20 21 
My results are: 10 11 
+0

İki farklı PROCESSES veya TWO iş parçacığı? –

+0

2 farklı süreç hakkında sorular soruyordum. –

+0

Aynı makinede veya farklı makinelerde mi çalışıyorsunuz? –

cevap

3

standardına Çalışma g/ç akımlar (C dili veya C++ cinsinden stdout ve stdin) MPI'nin en iyi parçası değildir (OpenMPI MPI'yi uygular). Bu konuda bazı slaytlar var: http://www.csee.wvu.edu/~donm/classes/cs591x/notes/io1.ppt ve Slide 10'un bir çözümü var. (veya kitabın "PS Pacheco tarafından Mpi ile Paralel Programlama" nin chapter 8.1) Eğer çıkışa diğer süreçlerden bazı verileri istiyorsanız

rütbe 0. ile sürecindeki cout ile tüm I/O'yu yap, sadece MPI göndermek Bu verilere sahip mesajı 0 ile karşılaştırınız.