Przejdź do treści

Linaro Forge

logo 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).

przykładowy raport HTML – podsumowanie

przykładowy raport HTML – podsumowanie

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.

przykładowy raport HTML – część szczegółowa

przykładowy raport HTML – część szczegółowa

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
należy wywołać ją z użyciem komendy
perf-report mpiexec xhpl
Po takim wywołaniu, w katalogu bieżącym powinny pojawić się pliki 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 aplikacji
  • B ─ łączna ilość węzłów/komputerów dla wywołania aplikacji w trybie MPI
  • YYYY-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).

interfejs graficzny Linaro MAP

interfejs graficzny Linaro 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
należy wywołać ją z użyciem komendy
map --profile mpiexec xhpl
Po takim wywołaniu, w katalogu bieżącym powinien pojawić się plik 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


Ostatnia aktualizacja: 7 grudnia 2023