Przetwarzanie równoległe


Spis treści

Skalowalność aplikacji czyli ilu użyć procesorów

Tryton Plus jest komputerem wielprocesorowym. Oznacza to, że aplikacje, aby mogły wykorzystać jego potencjał, powinny być napisane w specjalny sposób. Muszą one umieć wykorzystywać wiele procesorów na raz czyli muszą być zrównoleglone. Zrównoleglenia dokonuje się zazwyczaj przez odpowiednie przepisanie kodu programu tak aby jego najbardziej czasochłonne fragmenty mogły być wykonywane współbieżnie przez wiele procesorów Efektem tego jest skrócenie czasu wykonania obliczeń.

Tak napisany program uruchamia się dając mu do dyspozycji pulę procesorów. W idealnym przypadku można się spodziewać tylukrotnego przyspieszenia ilu użyje się procesorów, jednak w praktyce rzadko się to udaje. Wielkość przyspieszenia obliczeń w zależności od liczby użytych procesorów nazywamy skalowalnością. Skalowalność często jest ograniczona, np. na 16 procesorach uzyskujemy zadowalające przyspieszenie (obliczenia trwają np. 15 razy krócej niż na jednym procesorze), ale przy zwiększaniu liczby procesorów przyspieszenie to spada i np. przy 60 procesorach mozemy uzyskać już czas niewiele krótszy niż na trzydziestu. Wpływają na to zjawisko różne czynniki. Aplikacja prawie nigdy nie daje się zrównoleglić całkowicie, pozostają fragmenty obliczeń, które muszą być wykonywane sekwencyjnie(na jednym procesorze). Jeśli czas tych obliczeń jest znaczący np. sięga 10% całkowitego czasu obliczeń to dodawanie procesorów powyżej pewnej liczby nie spowoduje już żadnego przyspieszenia. Kolejną przyczyną ograniczonej skalowalności są opóźnienia związane z tym, że poszczególne procesory muszą co jakiś czas wymieniać się danymi nad którymi pracują, lub przesłać sobie wyniki. W przypadku klastrów ma to spore znaczenie, ponieważ połączenia między procesorami są zazwyczaj realizowane za pomocą medium o dużym - w porównaniu do szybkości pracy procesora - opóźnieniu sygnału.


Przed przystąpieniem do obliczeń z użyciem aplikacji równoległych należy zatem zbadać jej skalowalność. Naukowe programy obliczeniowe często oferują wiele trybów i opcji pracy, wiele zależy też do danych wejściowych na których program ma pracować. Trudno jest zatem jednoznacznie powiedzieć, czy aplikacja A skaluje się dobrze na N procesorach. Dlatego też przed wykorzystaniem na dużą skalę większej liczby procesorów do obliczeń zaleca się przeprowadzenie prób skalowalności danego przypadku. Można to zrobić używając właściwych, lub uproszczonych danych wejściowych do policzenia niewielkiej liczby kroków symulacji zależności od liczby procesorów i sprawdzeniu jak skraca się czas obliczeń. Najlepiej zacząć od najmniejsze liczby procesorów na jakiej da się uruchomić zadanie ze względu na wymagania pamięci, np. na czterech, i podwajać ich liczbę.

Klastry

Co to jest klaster

Klaster to grupa połączonych ze sobą komputerów dedykowanych do obliczeń. Można to sobie wyobrazić jak pracownię komputerową, tylko że bez monitorów, klawiatur i myszy. Komputery wchodzące w skład klastra - zwane nodami - są połączone szybką siecią umożliwiającą im współdziałanie, tak że klaster pracuje tak ja by był jednym komputerem o wielu procesorach. Daje to kilu-, kilkudziesięciokrotne skrócenie czasu obliczeń.

Przyspieszenie obliczeń

Aby program mógł wykorzystać moc obliczeniową klastra, musi być napisany w specjalny sposób umożliwiający jednoczesne obliczenia na wielu procesorach - musi być zrównoleglony. Jeśli użyte w programie algorytmy poddają się zrównolegleniu to możliwe jest uzyskanie znaczącego przyspieszenia obliczeń. Jeśli jest to program komercyjny należy sprawdzić w jego dokumentacji lub u producenta czy jest przystosowany do uruchamiania na klastrach linuksowych - zarówno 32- jak o 64-bitowych.

Ograniczona skalowalność

Program, mimo że jest zrównoleglony, zawsze wykonuje pewne elementy obliczeń sekwencyjnie. Ponadto części programu uruchomione na wielu procesorach muszą się ze sobą komunikować i wymieniać dane. Jeśli tych danych jest dużo, komunikacja może trwać znacząco długo w porównaniu do samych obliczenia. Dlatego niektóre programy przy zwiększaniu liczby procesorów ponad pewną granicę nie wykazują już przyspieszenia, mogą nawet zwalniać. Skrócenie czasu obliczeń ze wzrostem liczby użytych procesorów nazywamy skalowalnością. Skalowalność może wynosić np. 60 procesorów - tj. do tej liczby uzyskuje się jeszcze sensowne przyspieszenie. Skalowalność zależy od jakości zrównoleglenia aplikacji, oraz od sieci lub innego medium komunikacyjnego łączącego nody klastra.

Ilu użyć procesorów? Jaka jest skalowalność aplikacji?

Skalowalność najlepiej sprawdzić eksperymentalnie. Jeśli to możliwe należ dobrać taki zestaw danych wejściowych dla których zadanie na jednym procesorze liczy się co najmniej kilkadziesiąt minut nie dłużej jednak niż 10 godzin. Następnie zadanie to należy uruchomić na 2, 4, 8, 16, 32, 64 procesorach i sprawdzać czas wykonania i stopień przyspieszenia obliczeń.