Interesuje mnie, czy w OpenMPI istnieje polecenie lub technika, aby wywołać atomowe wywołanie do stdout (lub, o ile to możliwe, dowolnego strumienia)."Atomowe" wołanie do cout w MPI
Zauważyłem, że podczas wykonywania programów MPI wywołania zapisu do cout (lub innych strumieni) mogą stać się mylące, ponieważ każdy proces może pisać za każdym razem, gdy dotrze do pewnej sekcji kodu. Podczas raportowania wyników, do kilku wierszy może być zapisana linia, co wprowadza zamieszanie. Więc 2 różne procuje może zrobić coś takiego:
//Proc 10 - results calculated somewhere above
// result1 = 10
// result2 = 11
cout << "My results are: " << result1 << " " << resul2 << endl;
oraz:
//Proc 20 - results calculated somewhere above
// result1 = 20
// result2 = 21
cout << "My results are: " << result1 << " " << resul2 << endl;
Ale wynik może być:
My results are: 20 My results are: 10 11 21
Co szukam jest coś jak " blocking "lub atomic cout (jak również możliwe zapisywanie do innych strumieni, takich jak strumienie plików). Tak więc, gdy zacznę pisać do cout, blokuje się do końca instrukcji lub do momentu wydania endla lub wypuszczenia go do strumienia. Jeśli tak było, to bym być zagwarantowane, że 2 linie byłyby oddzielne (ale, oczywiście, ja wciąż nie wiem, która linia będzie na pierwszym miejscu):
My results are: 20 21
My results are: 10 11
Dwa różne PROCESY lub DWIE wątki? –
Pytałem o 2 różne procesy. –
Działa na tej samej maszynie lub na różnych maszynach? –