Linaro Forge
Wprowadzenie¶
Linaro Forge to komercyjny pakiet przeznaczony do pracy z aplikacjami równoległymi, zarówno wielowątkowymi jak i rozproszonymi. Udostępnia dwa narzędzia do analizy wydajności: Linaro Performance Reports – do generowania ogólnych raportów dot. wydajności aplikacji jako całości, oraz Linaro MAP – profiler szczegółowo analizujący zachowanie aplikacji w czasie. W skład pakietu wchodzi również równoległy debugger (Linaro DDT). Posiada wsparcie zarówno dla klasycznych programów wykonywanych na CPU jak i akcelerowanych na GPU (model CUDA).
Linaro Forge obsługu je wiele modeli zrównoleglania obliczeń, w tym MPI, CUDA i OpenMP. Posiada wsparcie dla najnowszych kompilatorów i standardów C/C++, obsługuje również języki Fortran oraz Python. Jest przeznaczony do działania na sprzęcie różnego rodzaju: procesory Intel, AMD, Arm, OpenPOWER, a także akceleratory NVIDIA GPU oraz AMD GPU.
Poprzednie wersje i nazwy pakietu
Narzędzia Linaro Forge (DDT, MAP, Performance Reports) były wcześniej rozwijane przez firmę Arm i znane pod nazwą Arm Forge. Jeszcze wcześniej znane były jako Allinea Forge.
Dostępność¶
Narzędzia firmy Linaro wchodzące w skład pakietu Forge są rozwiązaniem komercyjnym. Na stronie producenta możliwe jest pobranie wersji trial.
Szczegóły¶
Pakiet Linaro Forge składa się z trzech narzędzi przystosowanych do pracy z aplikacjami zarówno sekwencyjnymi, wielowątkowymi jak i rozproszonymi:
- Linaro Performance Reports – do generowania raportów dot. wydajności aplikacji,
- Linaro MAP – do profilowania wydajności i porad dotyczących optymalizacji,
- Linaro DDT – do debugowania.
Jako że skupiamy się na narzędziach do analizy wydajności, poniżej są opisane tylko pierwsze dwa z nich. Po informacje na temat debugera z pakietu Forge odsyłamy do strony Linaro DDT.
Linaro Performance Reports¶
Linaro Performance Reports jest narzędziem do przeprowadzania szybkiej analizy wydajności programu. Pomyślany jako punkt startowy do oceny wydajności programu – zachowania aplikacji pod kątem zużycia różnych zasobów. Tak jak reszta narzędzi z pakietu Linaro Forge, jest dostosowany do pracy z aplikacjami rozproszonymi i wielowątkowymi. Jego funkcjonalność jest podobna do Intel VTune Application Performance Snapshot.
Raporty¶
Po zastosowaniu programu Performance Reports otrzymuje się raport w formie strony HTML oraz zwykłego pliku tekstowego (TXT lub CSV). Zawiera on podsumowanie zachowania naszej aplikacji – procent czasu spędzonego przez badany program w trybach:
- obliczeniowym (compute),
- I/O (operacji wyjścia/wejścia systemu plików),
- MPI (operacji związanych z wywołaniami MPI),
- Python (czas wykorzystany przez interpreter, z wyłączeniem bibliotek zewnętrznych).
W dalszej części raport przedstawia bardziej szczegółowy opis każdego z badanych aspektów. Raport zawiera również komentarze dotyczące zmierzonych wartości oraz ewentualne rekomendacje dotyczące potencjalnych optymalizacji mogących poprawić wydajność aplikacji w danym obszarze.
W odróżnieniu od danych podawanych przez bardziej zaawansowane narzędzia (np. Linaro MAP), raport dotyczy całościowego wykonania aplikacji i nie umożliwia analizy zachowania aplikacji w czasie, ani w poszczególnych funkcjach. Dla przykładu: nie uzyskamy informacji, że aplikacja czeka na operacji I/O w 10 sekundzie wykonania z uwagi na wywołanie funkcji write
, a jedynie, że podczas uruchomienia aplikacja spędziła dany procent całościowego czasu wykonania na operacje I/O.
Zastosowania¶
Pakiet Linaro Performance Reports może być pomocny jako pierwsze (szybkie i czytelne) źródło informacji o wydajności aplikacji, a dokładniej:
- czasie wykonywania różnych typów operacji,
- identyfikacji potencjalnych źródeł niskiej efektywności,
- porównywania wydajności i zachowania różnych wersji aplikacji lub uruchomień tej samej aplikacji przy różnych konfiguracjach.
Informacje (i podpowiedzi) z raportów należy traktować jako poglądowe. Do dokładniejszego zrozumienia zachowania aplikacji zaleca się skorzystanie z profilera (Linaro MAP).
Tryb linii poleceń¶
Linaro Performance Reports posiada możliwość generowania raportów z linii poleceń – komenda perf-report
. Można to wykorzystać np. w ramach zadania wsadowego systemu kolejkowego. Możliwe jest przygotowanie raportów wydajności bez konieczności modyfikacji badanej aplikacji skompilowanej dynamicznie a także wykonanie raportu na podstawie istniejących plików z rozszerzeniem .map
wygenerowanych przez Linaro MAP.
Przykładowe uruchomienie Linaro Performance Reports
Aby uzyskać raport, wystarczy uruchomić aplikację w standardowy sposób, dodając jedynie na początku komendę perf-report
. Dla przykładu, jeśli aplikacja jest wywoływana poleceniem
mpiexec xhpl
perf-report mpiexec xhpl
xhpl_Ap_Bn_YYYY-MM-DD_hh-mm.txt
oraz xhpl_Ap_Bn_YYYY-MM-DD_hh-mm.html
, gdzie
A
─ łączna ilość procesorów dla wywołania aplikacjiB
─ łączna ilość węzłów/komputerów dla wywołania aplikacji w trybie MPIYYYY-MM-DD_hh-mm
─ format daty generowania pliku (rok/miesiąc/dzień/godzina).
Dodatkowo posiadając już wygenerowany wcześniej plik .map
, można na jego podstawie utworzyć raport bez ponownego uruchamiania aplikacji. Odpowiednia komenda wtedy to
perf-report plik.map
Linaro MAP¶
Linaro MAP to skalowalny profiler, służący do analizy zachowanie aplikacji pod kątem wydajności i zużycia różnych zasobów. Umożliwia interaktywną analizę profilu wykonania programu – tego jak zachowywała się aplikacja w czasie. Posiada wsparcie dla aplikacji rozproszonych oraz wielowątkowych. Jest wygodny w użyciu:
- nie wymaga zmian w kodzie aplikacji,
- nie generuje dużego narzutu, wg. informacji producenta, profilowanie rzeczywistych scenariuszy wykonania programu, nie generuje wzrostu czasu działania większego niż 5%.
Narzędzie Linaro MAP pozwala na analizę aplikacji korzystających nie tylko z CPU, ale również używających akceleratorów GPU (zarówno firmy NVIDIA jak i AMD, czyli w modelach CUDA oraz HIP). Możliwe jest profilowanie aplikacji zarówno pracujących jednowątkowo, wielowątkowo (OpenMP oraz pthreads) a także korzystających z technologii do pracy w systemie rozproszonym (MPI).
Linaro MAP udostępnia interfejs graficzny (GUI) do analizy danych zawierających zapis działania (profil) aplikacji użytkownika. Główną częścią GUI jest wizualizacja analizy działania aplikacji jej działania na osi czasu (timeline). Samo uruchomienie wybranej aplikacji użytkownika oraz rejestracja jej działania (profilowanie) może odbywać się zarówno z poziomu GUI jak i interfejsu wiersza poleceń (polecenie map
). Dzięki temu drugiemu rozwiązaniu możliwe jest zbieranie danych na systemach bez dostępnego środowiska graficznego, na przykład na platformach HPC. W takiej sytuacji analizę działania aplikacji można przeprowadzić później na innym urządzeniu, np. swoim komputerze, poprzez pobranie zapisanego profilu wykonania aplikacji (pliku .map
).
Przykładowymi wielkościami jakie można zbadać korzystając z Linaro MAP są:
- procent czasu CPU dla operacji:
- zmiennoprzecinkowych skalarnych i osobno wektorowych,
- typu integer skalarnych i osobno wektorowych,
- związanych z dostępem do pamięci,
- typu branch,
- wykorzystania rdzeni przez wątki;
- procent czasu wykorzystania rdzeni przez wątki w trybie użytkownika oraz kernela;
- ilość przełączeń kontekstu zarówno zwykłych jak i wymuszonych (voluntary i involuntary);
- przepustowość operacji odczytu oraz zapisu (POSIX I/O read/write);
- metryki transferu dla operacji dyskowych;
- dla zadań MPI:
- czas trwania wywołań MPI,
- średnia liczba operacji p2p oraz tzw. collective,
- liczniki danych wysłanych i odebranych, z podziałem na rodzaje operacji;
- dla zadań GPGPU:
- wykorzystanie procesora karty GPU,
- wykorzystanie pamięci GPU,
- metryki transferów pamięci dla kart NVidia:
- cpu - gpu, gpu - cpu,
- gpu - gpu - wewnątrz pojedynczego GPU,
- peer to peer - pomiędzy kartami GPU;
- monitorowanie poboru energii przy pomocy interfejsu RAPL.
Przykładowe uruchomienie Linaro MAP
Aby sprofilować aplikację, wystarczy uruchomić ją w taki sam sposób jak zwykle, dodając jedynie na początku map --profile
. Dla przykładu, jeśli aplikacja jest wywoływana poleceniem
mpiexec xhpl
map --profile mpiexec xhpl
xhpl_Ap_Bn_YYYY-MM-DD_hh-mm.map
, gdzie konwencja nazewnictwa jest podobna jak w przypadku perf-report
(patrz Linaro Performance Reports > Tryb linii poleceń).
Po wykonaniu profilu i wygenerowaniu pliku .map
, wyniki można obejrzeć w GUI.
Linki¶
- strona Linaro MAP
- strona Linaro Performance Reports
- dokumentacja
- materiały wideo - wprowadzenie do narzędzi Linaro