Przejdź do treści

Intel VTune Profiler

logo VTune

Wprowadzenie

Intel VTune Profiler (w skrócie VTune) to kompleksowe narzędzie do analizy wydajności aplikacji. Przewidziany dla programów wykonywanych na procesorach Intel CPU oraz akceleratorach Intel GPU. Posiada również wsparcie dla FPGA. Dla innych procesorów działa w ograniczonym stopniu. Udostępnia szeroki wachlarz analiz różnego typu – od ogólnej oceny wydajności, przez profilowanie, do szczegółowych informacji o wykorzystaniu zasobów sprzętowych. Wspiera wiele technologii zrównoleglania obliczeń oraz różne języki programowania.

VTune jest rozwiązaniem dojrzałym, rozwijanym przez firmę Intel od wielu lat. Przystępny w użytkowaniu, posiada dużo ułatwień na poziomie interfejsu użytkownika (np. wiele różnych widoków, kopiowanie wyników do postaci tekstowej, generowanie komend dla linii poleceń, przewodnik po funkcjonalnościach). Dokumentacja VTune (User Guide) jest bardzo rozbudowana, szczegółowo opisuje funkcjonalności i różne scenariusze wykorzystania. Również samo narzędzie wyświetla dużo wyjaśnień i podpowiedzi na temat tego jak interpretować zebrane dane.

Poprzednia nazwa

Do roku 2020 Intel VTune Profiler był znany jako Intel VTune Amplifier. W różnych materiał na temat VTune można napotkać na tę nazwę.

VTune umożliwia szerokie zastosowanie (patrz konfiguracje wspierane przez VTune). Pozwala na badanie wydajności zarówno pojedynczego programu jak i całego systemu. Główne cechy to:

  • może być wykorzystany do analizy programów napisanych m.in. w C/C++, Fortran, Python;
  • obsługuje wielowątkowość – dostarcza informacji o działaniu każdego z uruchomionych procesów i wątków;
  • wspiera m.in następujące technologie zrównoleglania obliczeń: OpenMP, SYCL, MPI.

Od strony użytkowej:

  • może być obsługiwany zarówno z linii poleceń jak i poprzez interfejs graficzny (GUI);
  • może zostać zintegrowany ze środowiskami programistycznymi (Visual Studio, Eclipse).

Dostępność

VTune należy do zestawu Intel oneAPI Base Toolkit, może również być zainstalowany osobno. Instalacja jest możliwa za pomocą instalatorów czy też systemowych menedżerów zarządzających pakietami (np. apt-get, yum). W tym drugim przypadku konieczne jest dodanie repozytorium Intel oneAPI. Więcej informacji:

Przykładowa instalacja na Ubuntu 22.04

Po dodaniu repozytorium Intel oneAPI dla menedżera apt wystarczy komenda:

sudo apt install intel-oneapi-vtune
Instalację (mimo ewentualnych ostrzeżeń i błędów) można zweryfikować sprawdzając komendy:
source /opt/intel/oneapi/setvars.sh
vtune
Pierwsza z powyższych komend odpowiednio zmodyfikuje ścieżkę PATH tak by polecenie vtune mogło zostać odnalezione (domyślna lokalizacja dla wersji 2024.0 to /opt/intel/oneapi/vtune/2024.0/bin64).

Szczegóły

Program VTune w trybie graficznym możemy uruchomić komendą vtune-gui. Do pracy z linii poleceń służy komenda vtune (więcej w Komendy linii poleceń). Oczywiście aby komendy te działały odpowiednia lokalizacja musi zostać dodana do zmiennej PATH. Służy do tego skrypt aktywujący środowisko.

Aktywacja środowiska

Przed rozpoczęciem pracy należy (jednorazowo) wywołać komendę:

source /opt/intel/oneapi/setvars.sh    # aktywacja oneAPI
lub
source /opt/intel/oneapi/vtune/2024.0/env/vars.sh    # aktywacja samego VTune
Pierwsza komenda jest wygodnym skrótem aktywującym wszystkie zainstalowane komponenty oneAPI. Druga ustawi tylko zmienne środowiskowe dla wskazanej wersji VTune (w tym przypadku wersji 2024.0). W przypadku pracy na superkomputerach załadowanie odpowiedniego modułu może automatycznie aktywować środowisko; w takim przypadku powyższa komenda nie jest potrzebna.

Dawne komendy amplxe

Dawne komendy służące do korzystania z VTune pochodziły od poprzedniej nazwy Amplifier. Były to odpowiednio amplxe-gui oraz amplxe-cl.

Podstawą działania VTune jest wykonywanie analiz różnego typu dla wskazanego przez użytkownika programu. Wykonanie każdej analizy skutkuje zebraniem danych na temat przebiegu programu. Następnie z tych danych tworzony jest raport z wykonania, który może być interaktywnie przeglądany w VTune. Raporty mogą również być ze sobą porównywane.

VTune GUI main

okno konfiguracji analizy

VTune umożliwia przeprowadzanie analiz na kilka sposobów:

  • standardowa analizy (uruchomienie wskazanego programu na lokalnym komputerze),
  • analiza na maszynie zdalnej,
  • analizy już uruchomionego programie (przypięcie do działającego procesu).

Domyślną analizą jest "Performance Snapshot", kliknięcie w nazwę analizy pozwala wybrać inną z dostępnych analiz.

Rodzaje analiz

VTune pozwala analizować wydajność programu pod wieloma względami. Każda analiza skupia się na innych aspektach badanego programu. Różne analizy mają różny poziom szczegółowości, a ich wykonanie może powodować większy lub mniejszy narzut na czas działania programu.

VTune GUI choose analysis

rodzaje analiz dostępne w VTune

Do podstawowych analiz, typowych dla uzyskania informacji o wydajności programu można zaliczyć:

  • Performance Snapshot – daje szybki ogląd na wydajność całej aplikacji; podaje uzyskane przez program wartości IPC (instructions per cycle) oraz informacje na temat wykorzystania CPU, wektoryzacji oraz wpływu dostępu do pamięci na wydajność programu;
  • Hotspots – przedstawia profil wykonania aplikacji w czasie z podziałem na wątki i procesy; pozwala zidentyfikować obszary kodu (funkcje oraz pętle), w których program spędza najwięcej czasu; ta analiza odpowiada typowemu działaniu różnych profilerów (np. gprof, Linaro MAP).

Do pogłębionej analizy wydajności programu można wykorzystać:

  • Microarchitecture Exploration – dostarcza szczegółowych, niskopoziomowych informacji na temat stopnia wykorzystania mikroarchitektury procesora, czyli możliwości obliczeniowych danego CPU; podaje ilość cykli oraz wykonanych instrukcji maszynowych wraz z informacją na jakiej czynności CPU spędził czas (np. pobieranie instrukcji, dostęp do pamięci, wykonanie spekulatywne).

Pozostałe analizy można podzielić wedle konkretnego aspektu, pod kątem którego chcemy przeanalizować naszą aplikację:

  • analizy dotyczące pamięci – ogólne zużycie (Memory Consumption) oraz szczegółowe informacje o dostępie do pamięci (Memory Access),
  • analizy dotyczące równoległości – wykorzystanie wątków oraz wektoryzacji,
  • analizy dotyczące I/O – badanie wydajności dostępu do danych, wykorzystania magistrali procesora,
  • analizy dotyczące akceleratorów – dostarczają informacji na temat interakcji na linii CPU – akcelerator, w przypadku GPU potrafią dostarczyć szczegółowych informacji na temat wykonania kerneli na karcie GPU i wykorzystania jej zasobów.

Analizy z kategorii "Platform Analyses" służą do badania wydajności całego systemu. Oprócz z góry zdefiniowanych analiz, VTune pozwala również na tworzenie własnych typów analiz (custom analysis).

Tryby próbkowania

Z perspektywy niskopoziomowej, można wyróżnić dwa sposoby przeprowadzania danej analizy przez VTune. Dotyczą one tego w jaki sposób VTune zbiera informacje na temat wykonania programu.

  • User-Mode Sampling, opiera się o zwyczajne możliwości oprogramowania (tzw. analiza software-based)
  • Hardware Event-Based Sampling, polega na konkretnym rozwiązaniu sprzętowym dostępnym w procesorach Intel (tzw. analiza hardware-based)

Niektóre rodzaje analiz mają do wyboru tryb próbkowania jako opcję. Inne z góry są oparte na jednym trybie (przeważnie hardware-based). Analizy typu hardware-based dostarczają dużo bardziej szczegółowych wyników i generują mniejszy narzut.

VTune na innych procesorach

VTune jest narzędziem przewidzianym do analizy aplikacji działających na układach firmy Intel. Nieoficjalnie, VTune może być wykorzystany również na innych procesorach (patrz VTune on AMD cpus? - Intel Community). Dotyczy to analiz software-based, czyli:

  • Hotspots,
  • Threading,
  • Memory Consumption.

Jest to możliwe dzięki temu, że user-mode sampling nie korzysta ze specyficznych rozwiązań sprzętowych, w które są wyposażone procesory Intel.

Wymagane uprawnienia

Do pracy z VTune, do wykonania większości analiz, potrzebne są odpowiednie uprawnienia lub dodatkowe sterowniki (patrz Linux Targets).

  • User-Mode Sampling
    • może wymagać uprawnień dot. funkcjonalności ptrace
  • Hardware Event-Based Sampling, wymaga jednego z dwóch rozwiązań:
Komunikaty dot. braku uprawnień

W przypadku gdy nie posiadamy odpowiednich uprawnień do wykonania danej analizy, VTune wyświetli odpowiedni komunikat.

  • komunikat dot. trybu user-mode

VTune error ptrace

  • komunikat dot. trybu hardware event-based

VTune error paranoid

Dla User-Mode Sampling, uprawnienia dot. ptrace są zależne od modułu bezpieczeństwa używanego przez daną instalację systemu linux (Linux Security Module). W przypadku gdy wykorzystywany jest moduł YAMA, odpowiednie uprawnienie wymaga ustawienia flagi /proc/sys/kernel/yama/ptrace_scope na 0. Więcej informacji w opisie yama – ptrace_scope.

Intel Sampling Drivers to sterowniki do próbkowania przygotowane przez firmę Intel. Ich zainstalowanie jest rekomendowane do korzystania z analiz w trybie Hardware Event-Based Sampling. Pozwalają one na najbardziej dokładne monitorowanie wykorzystania architektury procesorów Intel.

Zbieranie danych bez sterowników również jest możliwe (tzw. tryb driverless). W tym trybie analiza, z nieco ograniczonymi możliwościami, jest przeprowadzana w oparciu o narzędzie Perf. Aby z niego skorzystać konieczne jest konfiguracja mechanizmu dodatkowych uprawnień (capabilities) lub odpowiednie ustawienie flagi /proc/sys/kernel/perf_event_paranoid. Przyjmuje ona wartości od -1 do 4, gdzie im wyższa wartość, tym bardziej ograniczone możliwości zbierania informacji. Do próbkowania przez VTune w trybie driverless niezbędna jest wartość 0. Więcej informacji Perf > Konfiguracja uprawnień

Konieczność uprawnień administratora

Zmiana wartości wyżej wymienionych flag wymaga uprawnień administratora. Należy mieć na uwadze, że uprawnienia te mogą prowadzić do luk bezpieczeństwa (patrz Perf Security oraz yama – ptrace_scope).

W stosunku do systemów publicznie dostępnych (np. takich jak superkomputery) polityka bezpieczeństwa może zakazywać obniżenia wartości tych flag, skutkiem czego funkcjonalność VTune będzie ograniczona. W takim przypadku należy skontaktować się z administratorami i omówić dostępne możliwości korzystania z narzędzi do profilowania kodu.

Raporty

Wynikiem każdej analizy jest katalog zawierający zebrane dane oraz wyniki o nazwie np. r000ps, gdzie cyfry odpowiadają numerowi przeprowadzonej analizy, a końcowe litery jej typowi. Rezultaty są zapisywane w folderze projektu.

Nazewnictwo katalogów wynikowych

Dla przykładu, jeśli jako pierwszą wykonano analizę Hotspots, to folder wynikowy zostanie nazwany r000hs (rezultaty są numerowane od "000"). Następna wykonana analiza – przykładowo Microarchitecture Exploration – zostanie zapisana do katalogu o nazwie r001ue.

Wraz z wykonywaniem analiz, kolejne raporty dodają się do aktualnego projektu. VTune umożliwia wygodne przeglądanie wielu raportów – każdy z nich można otworzyć (dwuklik) w osobnej zakładce. Możliwe jest również porównanie ze sobą dwóch raportów.

VTune examples

wyniki kilku analiz w przykładowym projekcie

W przypadku wykonania analizy z linii poleceń lub kopiowaniu raportów z innej lokalizacji, można obejrzeć je w interfejsie graficznym na kilka sposób:

  • poprzez import wyników do projektu import button lub bezpośrednie otwarcie open button,
  • poprzez skopiowania folderu z wynikami do katalogu projektu, VTune automatycznie wyświetla w GUI wszystkie katalogi wynikowe znajdujące się w katalogu projektu,
  • otworzyć raport z linii poleceń komendą vtune-gui r000ps/r000ps.vtune

Przenoszenie wyników między maszynami odbywa się poprzez przekopiowanie całego katalogu wynikowego z jednej maszyny na drugą. Podgląd wyników wykonuje się jak powyżej. Ta prostota umożliwia prowadzenie analizy aplikacji na jednym komputerze i podgląd wyników na drugim. Przykładowo, można analizować aplikację na klastrze obliczeniowym, do którego mamy dostęp tylko w trybie linii poleceń i następnie na własnej maszynie otworzyć rezultaty w GUI.

Kompatybilność wersji VTune do analizy i GUI

Wyniki generowane w nowszej wersji VTune mogą być niekompatybilne z starszymi wersjami, choć odwrotna kompatybilność jest możliwa. Przykładowo, analiza przeprowadzona za pomocą VTune-2024.0 generuje wyniki, których nie można odczytać za pomocą starszych wersji programu.

Schemat pracy

VTune został pomyślany jako narzędzie mające ułatwiać proces optymalizacji kodu. Typowy sposób postępowania z danym programem przebiega następująco:

  1. wykonanie analizy Performance Snapshot (PS) – by uzyskać informacje i wskaźniki dotyczące ogólnej wydajności; na podstawie wyników tej analizy VTune sugeruje, których analiz użyć w następnej kolejności;
  2. wykonanie analizy Hotspots – by zlokalizować konkretne funkcje i pętle, które zajmują najwięcej czasu;
  3. wykonanie szczegółowych analiz (zasugerowanych przez PS) – by poznać dokładniej przyczyny limitujące wydajność programu;
  4. optymalizacja kodu – poprawa kodu w oparciu o informacje uzyskane z przeprowadzonych analiz.

Proces ten można powtarzać tak długo jak jesteśmy w stanie uzyskać poprawę działania kodu, biorąc pod uwagę zmieniające się punkty limitujące wydajność aplikacji.

Komendy linii poleceń

VTune pozwala na przeprowadzanie i konfigurowanie analiz oraz przeglądanie ich wyników z poziomu linii poleceń. Służy do tego komenda vtune. Po jej wywołaniu (bez żadnych argumentów lub z opcją -help) zobaczymy informację o dostępnych akcjach wraz z przykładami użycia. Więcej informacji dla każdej z dostępnych akcji vtune -help <action>.

Uruchomienie i konfiguracja analizy

Główna akcja to collect odpowiedzialna za wskazanie typu analizy jaki chcemy przeprowadzić. Rodzaje i krótkie opisy analiz można zobaczyć poprzez vtune -help collect. Przykładowo dla programu ./test i analizy typu Hotspots odpowiednia komenda to:

vtune -collect hotspots ./test
Konfiguracja analizy

Każda analiza posiada swoje możliwości konfiguracji. Wiele z nich jest ustawianych za pomocą opcji -knob. Przykładowo

vtune -collect hotspots -knob sampling-mode=hw ./test
wykona analizę Hotspots w trybie próbkowania zdarzeń sprzętowych (hardware event-based sampling) zamiast software’owym (user-mode sampling). Dostępne wartości dla danej analizy można podejrzeć korzystając z opcji help, np.
vtune -help collect hotspots | less

Interfejs graficzny VTune umożliwia generowanie polecenia, którym można uruchomić wybraną analizę w linii poleceń. Umożliwia to wygodne konfigurowanie opcji analizy z poziomu GUI.

configuration of the analysis

konfiguracja analizy – oznaczono przycisk generujący komendę

Przykładowa komenda wygenerowana z GUI

Po wybraniu aplikacji i analizy Hotspots z opcją Hardware Event-Based Sampling (jak na obrazku powyżej), kliknięcie w przycisk wskazany na zielono wyświetli okno zawierające przygotowaną komendę:

/opt/intel/oneapi/vtune/2024.0/bin64/vtune -collect hotspots -knob sampling-mode=hw \
    -app-working-dir /path/to/workdir --app-working-dir=/path/to/workdir -- /path/to/app.exe

Przegląd wyników

Z katalogu wynikowego możliwe jest wygenerowanie tekstowego raportu. Taki raport zawiera wskazany wycinek informacji, które można obejrzeć w GUI. Istnieją różne opcje, którymi można wskazać, co ma się znaleźć w raporcie. Przykładowa komenda:

vtune -report summary -r r001ps/

Flaga -r wskazuje katalog wynikowy, z którego raport ma być wygenerowany, "summary" to typ raportu. Ten typ pozwala wygenerować kopię informacji zawartych w widoku Summary danej analizy (tu Performance Snapshot). W przypadku analizy Hotspots raport zawierający funkcje zużywające najwięcej czasu może zostać wygenerowany komendą opcją vtune -report hotspots.

Ograniczenie dodatkowych informacji w raporcie

Podobnie jak w GUI, raport może zawierać zarówno liczby jak i wyjaśnienia jak je interpretować. Aby ograniczyć informacje zawarte w raporcie do danych bez objaśnień, należy użyć opcji -report-knob show-issues:

vtune -report summary -r r001ps -report-knob show-issues=false

Istnieją jeszcze wiele innych typów raportów oraz opcji generacji i formatowania danych. Więcej informacji vtune -help report.

Analizy

Performance Snapshot

Jest to podstawowa analiza dostarczana przez VTune. Pomyślana jako punkt startowy do oceny wydajności programu, do wykonania przed innymi analizami. Podobną, nieco rozszerzoną funkcjonalność udostępnia również dodatkowe narzędzie Application Performance Snapshot, które jest dostarczane wraz z VTune.

Komenda do wywołania analizy

vtune -collect performance-snapshot -- ./app.exe

Zastosowanie:

  • szybkie zebranie informacji o wydajności aplikacji,
  • wskazanie głównych czynników (w skali makro) limitujących wydajność,
  • zasugerowanie jaką analizę wykonać w kolejnym kroku.

Dostarczane informacje:

  • czas działania, wskaźnik IPC, wskaźnik FLOPS,
  • stopień efektywnego wykorzystania dostępnych rdzeni,
  • jakość wykorzystania mikroarchitektury CPU,
  • charakterystyka dostępu do pamięci (z uwzględnieniem hierarchii cache),
  • stopień wektoryzacji obliczeń.

PS analysis result

rezultat analizy Performance Snapshot

Interfejs graficzny Performance Snapshot

Główna sekcja to widok wyboru kolejnej analizy, przy czym analizy sugerowane przez VTune są zaznaczone na czerwono. Kliknięcie na dowolną z nich powoduje otwarcie okna konfiguracji nowej analizy.

Po prawej stronie znajdują się sekcje poświęcone danym liczbowym w postaci list rozwijanych. Zawarte w nich wartości charakteryzują wydajność aplikacji, najczęściej procentowo względem maksymalnych osiągów możliwych do uzyskania w danej kategorii. Przykładowo wektoryzacja na poziomie 99.7% to bardzo dobry wskaźnik. W przypadku "Memory Bound" im wyższa wartość tym bardziej dostęp do pamięci spowalnia obliczenia i wymaga poprawy.

Interfejs podpowiada, na co należy zwrócić uwagę za pomocą czerwonych flag przy konkretnych wartościach. Po najechaniu na nie wyświetla się informacja, o czym dana wartość świadczy i ogólne rady jak można poprawić dany wskaźnik.

Względność informacji o wykorzystaniu dostępnych rdzeni

Należy mieć na uwadze, że wskaźnik wykorzystania rdzeni (Logical Core Utilization) jest mierzony w stosunku do wszystkich dostępnych na danym komputerze rdzeni. W przypadku gdy program celowo został uruchomiony na mniejszej liczbie rdzeni, komunikaty VTune mogą być nie do końca adekwatne. W takiej sytuacji należy bardziej kierować się wartością numeryczną niż procentową.

Na powyższym przykładzie, wartość 3.837 należy przyrównać do 4 rdzeni, gdyż w takiej konfiguracji został uruchomiony program (co odpowiada ich 95.9% a nie 8% wykorzystaniu).

Performance Snapshot może być wygodnym sposobem do porównywania kilku wariantów tego samego programu, np. tego samego kodu skompilowanego z różnymi flagami albo programu sprzed i po optymalizacji.

Hotspots

Jest to analiza tworząca profil wykonania aplikacji, typowa dla różnych narzędzi do analizy wydajności. Jej głównym celem jest dostarczenie informacji ile czasu program spędza na wykonanie różnych miejsc kodu. Pozwala na pomiar wydajności nie tylko funkcji ale również poszczególnych pętli, a nawet linijek kodu źródłowego.

Komenda do wywołania analizy

  1. user-mode sampling
    vtune -collect hotspots -- ./app.exe
    
  2. hardware event-based sampling
    vtune -collect hotspots -knob sampling-mode=hw -knob enable-stack-collection=true -- ./app.exe
    

Zastosowanie:

  • zlokalizowanie funkcji, których wykonanie zajmuje najwięcej czasu,
  • wizualizacja wykorzystania CPU przez poszczególne wątki i procesy,
  • poznanie zachowania programu, ścieżek wywołań funkcji.

Dostarczane informacje:

  • ilość czasu spędzona w danej funkcji, pętli lub linijce kodu:
    • przez całą aplikację,
    • przez wybrany wątek;
  • liczba wykonanych instrukcji i użycie mikroarchitektury (dostępne w trybie hardware-based),
  • aktywność wątków i procesów w czasie (wykorzystanie CPU),
  • wykorzystanie fizycznych i logicznych rdzeni procesora w czasie (dostępne w trybie hardware-based).

HS analysis result

analiza Hotspots, widok Bottom-up

Interfejs graficzny Hotspots – widok Bottom-up

Podstawowym widokiem dla analizy Hotspots jest widok Bottom-up. Głównym jego elementem jest panel przedstawiający rozbicie czasu pracy CPU na poszczególne funkcje. Pozwala on na grupowanie funkcji według stosu wywołań na wiele różnych sposobów (dropdown "Grouping"), m.in.:

  • z podziałem na wątki i procesy,
  • bez takiego podziału (co odpowiada sumarycznym wynikom dla wszystkich wątków),
  • z podziałem na moduły, biblioteki czy pliki źródłowe, z których pochodzi dana funkcja.

Z prawej strony znajduje się, możliwy do ukrycia, widok stosów wywołań (call stacks) wybranej funkcji. Dwuklik na danej funkcji pozwala na otwarcie widoku kodu źródłowego.

W dolnej części znajduje się timeline wykorzystania CPU – pokazuje, jak zmieniał się stopień wykorzystania procesora w trakcie wykonania aplikacji. Dane są zbierane osobno dla każdego wątku i można je również wyświetlić w sposób zgrupowany.

Dodatkowo na samym dole znajduje się filtr wyników, stosowalny do wszystkich sekcji naraz. Pozwala m.in. na:

  • zawężenie wyników tylko do pojedynczego wątku lub procesu,
  • ograniczenie się do funkcji o niskim wykorzystaniu CPU,
  • wskazanie aby podział funkcji na pętle został uwzględniony w widoku.
Podgląd wykorzystania rdzeni CPU

Do oceny wykorzystania CPU szczególnie przydatny może być widok "Logical Core / Thread". Dzięki niemu zobaczymy który wątek, w jakim momencie używał danego rdzenia logicznego.

hotspots timeline

Należy pamiętać, że dostęp do informacji o wykorzystaniu rdzeni (zarówno fizycznych jak i logicznych) jest możliwy tylko w przypadku gdy analiza została przeprowadzona z wykorzystaniem trybu hardware-based.

Raport Hotspots pozwala na analizę profilu działania aplikacji poprzez kilka przydatnych widoków.

  • Summary – Przedstawia listę funkcji zajmujących najwięcej czasu oraz histogram efektywnego wykorzystania dostępnych rdzeni CPU.
  • Bottom-up / Top-Down Tree – Prezentują listę funkcji wraz z ich czasami wykonania oraz panel z osią czasu. Możliwości tego widoku (filtrowanie, grupowanie) zostały omówione powyżej. Te dwa widoki różnią się sposobem prezentacji danych ze względu na stos wywołań prowadzący do wykonania danej funkcji (call stack):
    • bottom-up, przedstawia sumaryczny czas spędzony w danej funkcji, następnie można podzielić ten czas ze względu na funkcje, przez którą została wywołana analizowana funkcja;
    • top-down, przedstawia czas zgodnie z kolejnością wywołań (dla danej ścieżki wywołania, ile czasu spędzono w analizowanej funkcji i jakie funkcje ona wywołała).
  • Caller/Callee – Przedstawia informacje o tym ile czasu dana funkcja znajdowała się na stosie wywołań (CPU Time: Total), a ile czasu spędzono bezpośrednio na wykonywaniu instrukcji tej funkcji (CPU Time: Self). Oprócz tego dla każdej funkcji można podejrzeć, z jakich funkcji była ona wywoływana oraz jakie funkcje ona wywoływała.
  • Flame Graph – Wizualizuje proporcję czasu spędzonego na konkretnych funkcjach, według stosu wywołań (patrz opis Flame Graphs); ⚠️ widok ten nie przedstawia osi czasu wykonania programu, tj. funkcje nie są ułożone w takiej kolejności w jakiej były wykonywane przez program.
  • Platform – Zawiera oś czasu wykorzystania CPU, taką jak w widoku Bottom-up.
  • Widok kodu źródłowego – Otwierając konkretną funkcję (dwuklik) w widoku Bottom-up można zobaczyć ilość czasu spędzonego przez program w konkretnych linijkach kodu. Możliwy jest również podgląd instrukcji maszynowych (assembly) i czas spędzony na ich wykonaniu.

widok kodu

ilość czasu spędzonego na konkretnych linijkach kodu wybranej funkcji

Czas funkcji a wielowątkowość

W przypadku gdy program był wykonywany przez kilka wątków, wyświetlany w raporcie czas spędzony w danej funkcji to suma czasów wykonania przez wszystkie wątki. Takie zachowanie jest obecne w widokach w których wyniki z wielu wątków są agregowane. Jeśli ustawimy filtr na pojedynczy wątek lub wybierzemy sposób grupowania uwzględniający wątki, wtedy uzyskamy czas będzie odpowiadał rzeczywistemu czasowi wykonania.

Microarchitecture exploration

Jedna z najbardziej szczegółowych analiz dostępnych w VTune, rozszerzająca wyniki analizy Hotspots. Skupia się na ukazaniu stopnia w jakim możliwości obliczeniowe danego procesora firmy Intel zostały wykorzystane. Dane są podawane w odniesieniu do mikroarchitektury – tego jak jest zbudowany i jak funkcjonuje procesor. Nazewnictwo, które tutaj się pojawia, wymaga dobrego zrozumienia podstaw działania komputera na poziomie sprzętowym.

Komenda do wywołania analizy

vtune -collect uarch-exploration -- ./app.exe

Zastosowanie:

  • szczegółowe zbadanie stopnia wykorzystania możliwości obliczeniowych CPU,
  • wizualizacja wąskich gardeł w postaci tzw. µPipe,
  • zlokalizowanie fragmentów kodu o najgorszym wskaźniku CPI.

Dostarczane informacje:

  • ilość czasu spędzona w danym fragmencie kodu, wzbogacona o:
    • ilość cykli,
    • ilość wykonanych instrukcji maszynowych,
    • wskaźnik CPI,
  • na jakich niskopoziomowych operacjach procesor CPU spędził czas (np. pobieranie instrukcji, dostęp do pamięci, wykonanie spekulatywne),
  • aktywność wątków i procesów oraz wykorzystanie rdzeni procesora w czasie.

Tak jak w Hotspots, dane można wyświetlać zarówno dla całej aplikacji jak i z podziałem na procesy czy wątki (poprzez odpowiednie grupowanie lub filtrowanie).

analiza mikroarch.

analiza mikroarchitektury, widok Bottom-up

Wizualizacja wyników – µPipe

Elementem charakterystycznym dla analizy wykorzystania mikroarchitektury jest wizualizacja wyników w postaci graficznej poprzez tzw. µPipe. Przedstawia on stopień wykorzystania możliwości obliczeniowych wraz z czynnikami ograniczającymi, poprzez zwężający się strumień wykonywanych przez procesor operacji.

upipe
przykładowy µPipe wraz z opisem czynników limitujących wydajność [źródło]

  • zielony obszar przedstawia frakcję efektywnie wykonanych instrukcji (Instructions Retired)
  • na czerwono zostają podświetlone te kategorie, które mogą istotnie rzutować na ograniczenie wydajności

Eksploracja rezultatów analizy jest możliwa za pośrednictwem kilku widoków.

  • Summary – Przedstawia podsumowanie wykorzystania mikroarchitektury dla całej aplikacji, zwizualizowane przez µPipe. Podobnie jak Hotspots, zawiera histogram efektywnego wykorzystania dostępnych rdzeni CPU.

  • Bottom-up Podobny do analogicznego widoku w raporcie z Hotspots. Zamiast panelu ze stosem wywołania prezentowane są informacje o wykorzystaniu mikroarchitektury przez wybraną funkcję. Oprócz wartości liczbowych, dane są wizualizowane przez µPipe. Z tego widoku, poprzez otwarcie (dwuklik) wybranej funkcji, można przejść do widoku kodu źródłowego. Udostępnia podobne funkcjonalności – filtrowanie oraz różne sposoby grupowania.

  • Event Counts – Prezentuje ilość cykli, instrukcji, CPI oraz ilość zliczonych zdarzeń sprzętowych (hardware events) różnego typu dla każdej funkcji. Lista zdarzeń jest bardzo rozległa.

  • Platform – Zawiera oś czasu wykorzystania CPU, taką jak w widoku Bottom-up.

  • Widok kodu źródłowego – Przedstawia informacje z widoku Bottom-up z podziałem na linie kodu lub instrukcje asemblerowe.

Narzędzia

W obszarze analizy wydajności oraz optymalizacji kodu, Intel udostępnia również inne narzędzia.

  • Intel Advisor – Pomaga w zoptymalizowaniu wykorzystania wektoryzacji, wielowątkowości oraz dostępu do pamięci; m.in. potrafi przeprowadzić analizę typu Roofline oraz dać sugestie bezpośrednio na poziomie kodu źródłowego.

  • Intel Trace Analyzer and Collector (ITAC) – Służy do analizy zachowania aplikacji zrównoleglających obliczenia przy użyciu MPI.

  • Application Performance Snapshot – Narzędzie dostarczane razem z VTune; umożliwia wykonanie analizy podobnej do Performance Snapshot.

Application Performance Snapshot

Pełna nazwa to Intel VTune Profiler Application Performance Snapshot (w skrócie APS). Dostępny po aktywacji środowiska VTune (source /opt/intel/oneapi/setvars.sh) jako osobny program – komenda aps. Pozwala na przeprowadzenie analizy, która udostępnia podobne informacje co analiza Performance Snapshot z VTune: wykorzystanie CPU, efektywność dostępu do pamięci, wektoryzacja. Głównym wyróżnikiem APS w stosunku do analizy Performance Snapshot jest możliwość analizowania aplikacji korzystających z MPI.

raport aps

przykładowy raport wygenerowany przez APS [źródło]

APS pozwala w wygodny sposób odczytywać rezultaty, ponieważ posiada możliwość zapisu wyników w postaci HTML. Ułatwia to dzielenie się wynikami, gdyż taki plik można przesłać innej osobie, która może przejrzeć go bez konieczności instalacji VTune. Informacje w raporcie są prezentowane w postaci sekcji podobnych do tych z GUI VTune. Raport również wyświetla flagi przy parametrach, które mogą wymagać poprawy, oraz dostarcza podpowiedzi.

Komendy APS

Wywołanie analizy (przykład dla aplikacji MPI, wykonywanej na 4 procesach):

mpirun -n 4  aps  ./app.exe

Generowanie raportu:

aps --report /path/to/analysis-result-dir

Linki


Ostatnia aktualizacja: 6 grudnia 2023