23. Operacja zbiorowa ,w której dane sa np. sumowane (można wykonac tez inne operacje) po wszystkich procesach a wynik trafia bądź do procesora root (reduce) lub do wszystkich procesorow (allreduce) .
24. Powodem tego jest skonczona precyzja . Problem pojawia się gdy dodajemy do siebie liczby zmiennoprzecinkowe bardzo rozniace się rzedami wielkości . Wówczas możliwy jest przypadek ze po dodaniu takich liczb , wynikiem będzie niezmieniona ta duzo wieksza. Dlatego w operacji redukcji wazne będzie wówczas które liczby dodamy do siebie pierwsze .
25.
26. ? Operacje nieblokujace to dla których nie jest wazny „wynik” dzialania i nie pilnuja prawidlowego zakończenia . Natomiast blokujące to takie jak otwieranie,zamykanie , czytanie ,pisanie do,z pliku , kurwa nie wiem dokladnie J str 7 prezentacja MPI-2 pisze ale niejasno
27. Plik jest dzielony na tzw „widoki” czyli w praktyce dany węzeł widzi tylko konkretna czesc pliku , obszary te mogą być rozłączne dla jednego wezła , czyli się rozumie ze wezel może widziec np. kawalek początku i kawalek konca . I dla niego wtedy to jest caly plik , nie musi jawnie przeskakiwac dziur których nie widzi , nawet nie wie o nich. MPI rozdziela widoki pomiedzy węzły , oraz / lub może ukryc pewne jego czesci tak aby żaden wezel ich nie widział .
28. Mowimy ze osiagamy spójność sekwencyjna jeśli zbior operacji zachowuje się tak ,jak gdyby były one wykonane szeregowo ,a kazda z nich była atomowa.
29. Liczbe odczytanych elementow możemy wydobyc ze statusu za pomoca metody Get_count() .
30. Prawo Amdahla zaklada ze ulamek zrównoleglenia F nie zalezy od liczby procesorow , co w praktyce okazuje się nie prawda , ponieważ zwykle przy większej ilości prockow udaje się bardziej zrównoleglić program,
31. Stosujemy taktyke odbior-nadanie na nieparzystych , a nadanie-odbior na parzystych .
Czyli :
If(moj_numer % 2 != 0) {
Recv(…);
Send(…);
}
Else {
Send(….);
Rec.(….);
32. Ich obsluga musi być wlaczona . Biblioteka MPI musi być skompilowana z odpowiednimi opcjami żeby ich obsluga była wlaczona ,domyślnie zwykle jest wylaczona. Musimy także wymusic zgłaszanie wyjątków poprzez funkcje Set_errhandler(MPI::ERRORS_THROW_EXCEPTIONS) aby pojawienie się bledy zwracalo wyjatek , domyślnie zwraca kod bledu.
33.Fence() jako funkcja synchronizujaca przygotowuje (zaczyna) i konczy operacje RMA (Remote Memory Access) , sa to operacje jednostronnej komunikacji. Fence() gwarantuje ze opracje na oknie zakończyły się.
34. Operacje pakowania stosujemy np. wtedy gdy mamy do przeslania tablice o dużych rozmiarach w której maly odsetek elementow jest niezerowy . Wówczas wszystkie elementy niezerowe gromadzimy w osobnym buforze i przesylamy tylko jego . Rozmiar bufora nie musi mieć dokładnego rozmiaru rownego wielokrotności -- > ilość_elementow_niezerowych * typ_tych_elementow . Może być on nieco wiekszy.
35. To jest kurwa posrane , str 28 MPI-2 nie wiem czy będę się tego uczyl wogle ,nie lubie takiej paplaniny
36. To ma być pseudokodem ale zapisze tak jak on to pisal , pewnie nie wymaga tego tak dokladnie :
Init();
Int bufor[1000];
Mój_numer=Get_rank();
If (wezel #0) rozmiar_okna = 0;
If (wezel #1) rozmiar_okna = 1000;
Okno = Create(bufor,rozmiar_okna,sizeof(int),…);
If(wezel #0) wypełnij_czyms_okno();
Okno.Fence(); //przygotowanie do RMA
If (wezel #0) okno.Put(bufor,1000,MPI::INT,1,0,1000,MPI::INT);
If (wezel #1) // zrob sobie kawe
Okno.Fence();
Okno.Free();
Finalize();
37.FAŁSZ
38.PRAWDA
39.FAŁSZ
40.FAŁSZ
41.PRAWDA
42.PRAWDA
43.PRAWDA
44.FAŁSZ
inf4