2012-05-01 17 views

Odpowiedz

9

Wydaje mi się, że za dużo w niej czytasz. Myślę, że oznacza to po prostu, że w zależności od implementacji , wszystko od 0 losowej liczby całkowitej dodatniej jest prawidłową liczbą. Nietrudno wyobrazić sobie tag wiadomości, który nie wymaga parametrów.

Jeśli znacznik komunikatu nie wymaga parametrów, to prawidłowe jest wysyłanie tylko zera (i, w rzeczywistości, być może nieprawidłowe, aby wysłać więcej). Trzeba pamiętać, że żadne parametry nie są tym samym, co brak danych, ponieważ znacznik ten jest "parametrem" sam w sobie.

+0

+1. Krótko mówiąc, nawet bez ładunku, sam fakt, że komunikat został odebrany może być wystarczająco dużo informacji, np. aby zasygnalizować, że osiągnięto pewien punkt w wykonaniu. – suszterpatt

+0

ale dlaczego nie powiedziałoby, że liczba zero jest zawsze ważna? (Zgadzam się, że wiadomości bez ładunku są przydatne) – mgilson

+2

Masz rację zero jest zawsze poprawne Zajrzałem do standardu (sekcja 3.2.2 standardu MPI 2.2) – mgilson

5

Oznacza to, że każda funkcja w MPI, która wymaga określenia rozmiaru danych wiadomości, akceptuje zero, ale to nie znaczy, że prowadziłoby to do poprawnego kodu aplikacji.

Na przykład MPI_Send przyjmuje 0 jako liczbę i zawsze wysyła pusty komunikat, który nie zawiera żadnych danych, ale nadal ma kopertę i może zostać odebrany przez dowolny pasujący znak MPI_Recv. Z drugiej strony, jeśli podasz 0 jako liczbę w MPI_Recv, otrzymasz błąd obcinania wiadomości dla każdej pasującej niepustej wiadomości, która dotarła. To jest 0 prawie nigdy nie jest poprawną (z punktu widzenia aplikacji) wartość zliczania dla MPI_Recv, mimo że jest całkowicie dopuszczalna dla MPI.

Zera są powszechnie akceptowane w MPI ponieważ umożliwia jeden napisać więcej kodu symetryczny (np kod bez partii if (count != 0) ...

+0

Nie jestem pewien, czy rozumiem "symetryczny" kodowy argument ... Czasami informacja z koperty wiadomości jest wszystkim, czego potrzebujesz (na przykład do zsynchronizowania dwóch procesów). – mgilson

+1

Symmetric oznacza, że ​​w kodzie nie ma "if" -s, dzięki czemu łatwiej jest go odczytać i zrozumieć. Innym przykładem jest użycie 'MPI_PROC_NULL' w celu uniknięcia logiki rangowej w procesach granicznych w nieperiodycznej topologii kartezjańskiej, np. "jeśli nie jestem najwyższą rangą, to wyślij wiadomość do rangi + 1" lub "jeśli nie jestem w rankingu 0, a następnie otrzymam wiadomość od rangi-1". –

Powiązane problemy