Skocz do: nawigacji, wyszukiwania

Itaccs1: Różnice pomiędzy wersjami

 
Linia 6: Linia 6:
 
<h3>Budowanie aplikacji</h3>
 
<h3>Budowanie aplikacji</h3>
  
Pliki potrzebne do wykonania niniejszego tutoriala należy pobrać klikając następujący link: [Tutorial - niezbędne pliki]. Pobrane archiwum należy rozpakować. Wewnątrz znajduje się plik z kodem źródłowym aplikacji oraz Makefile.
+
Pliki potrzebne do wykonania niniejszego tutoriala należy pobrać klikając następujący link: [http://www.miclab.pl/other/download/ITAC.zip Tutorial - niezbędne pliki]. Pobrane archiwum należy rozpakować. Wewnątrz znajduje się plik z kodem źródłowym aplikacji oraz Makefile.
  
  

Aktualna wersja na dzień 14:07, 26 lis 2015


Analiza aplikacji


Budowanie aplikacji

Pliki potrzebne do wykonania niniejszego tutoriala należy pobrać klikając następujący link: Tutorial - niezbędne pliki. Pobrane archiwum należy rozpakować. Wewnątrz znajduje się plik z kodem źródłowym aplikacji oraz Makefile.


Do przeprowadzania analizy przy pomocy narzędzia Intel Trace Analyzer and Collector wymagana jest aplikacja zbudowana w trybie release z włączoną optymalizacją wraz z dołączonymi informacjami o debugowaniu. Generowanie pliku z rezultatami może odbywać się na dwa różne sposoby:

  • kompilacja aplikacji z flagą –trace,
  • uruchamianie aplikacji z flagą –trace.

W obu przypadkach plik z rezultatem analizy generowany jest w momencie uruchomienia aplikacji.

  1. Uruchamiamy terminal
  2. Używając polecenia cd przechodzimy do katalogu, w którym znajduje się kod źródłowy analizowanej aplikacji
  3. Budujemy aplikację wpisując polecenie make
  4. Generujemy plik z rezultatami analizy uruchamiając jednocześnie aplikację poleceniem make run


Interpretacja rezultatów

Po uruchomieniu aplikacji wygenerowany został zestaw plików w tym main.stf, który zawiera rezultaty.

  1. Otwieramy Intel Analyzer and Collector w celu wyświetlenia danych, wpisując w terminalu polecenie traceanalyzer main.stf


Po uruchomieniu narzędzia wyświetlone zostaje okno, które przedstawia podsumowania analizy. W przypadku analizowanej aplikacji wygląda one następująco:
Itac cpu 1.png

W podsumowaniu wyświetlone są informacje na temat całkowitego czasu jaki procesy poświęciły na wykonanie obliczeń, liczby uruchomionych procesów oraz liczby węzłów. W sekcji Ratio przedstawiony jest czas aplikacji poświęcony na wykonanie funkcji MPI (kolor czerwony) oraz czas poświęcony na wykonanie kodu użytkownika (kolor niebieski). Poniżej znajduje się lista najbardziej aktywnych funkcji MPI w programie, wraz z czasem potrzebnym na wykonanie ich przez wszystkie procesy.

Na podstawie przedstawionych danych widzimy, wywołania funkcji MPI zajmują nieco ponad 89% czasu, a najbardziej aktywną funkcją jest MPI_Recv, która jest łącznie aktywna przez ponad 83% czasu.

  1. Naciskamy przycisk Continue


Otwarte zostaje okno, w którym wyświetlone są szczegółowe dane na temat analizowanej aplikacji.

  1. Z menu Chart wybieramy Event Timeline


Event Timeline przedstawia graficzne zachowanie poszczególnych procesów w trakcie działania aplikacji. Kolorem czerwonym oznaczony jest czas potrzebny na wykonanie danej funkcji MPI, natomiast kolor niebieski przedstawia czas potrzebny na wykonanie kodu użytkownika. W przypadku analizowanej przez nas aplikacji, Event Timeline wygląda następująco:
Itac cpu 2.png

Jak widać na powyższym rysunku procesy, na początku wykonują kod użytkownika. Następnie wszystkie procesy, za wyjątkiem procesu o numerze zero wywołują funkcję MPI_Recv, oczekując na dane przesłane od procesu P0. Przesyłanie danych pomiędzy procesami oznaczone jest liniami w kolorze czarnym.

  1. Na wykresie zaznaczmy obszar, w którym odbywa się komunikacja pomiędzy procesami
Itac cpu 3.png

Jak widać pierwszy proces (P0) przesyła dane do pozostałych procesów. Na początku proces otrzymuje rozmiar tablicy, następnie przesyłane są dane potrzebne do wykonania obliczeń (dwie tablice). Po wykonaniu obliczeń wykonywana jest operacja redukcji, przy pomocy funkcji MPI_Reduce. Niebieska kropka przedstawia na rzecz, którego procesu wykonywana jest redukcja, w przypadku analizowanej przez nas aplikacji operacja redukcji wykonywana jest dla procesu P0, ponieważ właśnie do niego wysyłane są rezultaty obliczeń pozostałych procesów.

  1. Zamykamy Event Timeline
  2. Z menu Chart wybieramy Quantitative Timeline


Quantitive Timeline przedstawia równoległe zachowanie aplikacji. Na wykresie zaznaczona jest aktywność procesów i wątków, ile z nich aktualnie wywołuje funkcje MPI oraz kod użytkownika. Dla analizowanej przez nas aplikacji zakładka Quantitative Timeline, wygląda następująco:
Itac cpu 4.png

Na podstawie danych przedstawionych widzimy, że po starcie aplikacji, wszystkie procesy wykonywały kod użytkownika, po czym 9 z nich wywołało funkcję MPI. Po upływie około 0,85 sekundy wszystkie procesy wykonywały funkcje MPI.

  1. Zamykamy wykres Quantitative Timeline
  2. Z menu Chart wybieramy Message Profile


Message Profile przedstawia komunikację między procesami w postaci macierzy, gdzie dana komórka odpowiada wartości danej operacji wykonanej pomiędzy procesami. Wiersze macierzy odpowiadają procesowi, który wysyła dane natomiast kolumny to procesy, które te dane odbierają. Rodzaj wyświetlonych danych określany jest przy pomocy meny kontekstowego.

  1. Klikamy prawym przyciskiem myszy na wykres
  2. Z menu kontekstowego wybieramy Attribute to show > Total Volume Data


Po wykonaniu powyższych czynności macierz przedstawia wielkość danych przesyłanych pomiędzy procesami aplikacji.
Itac cpu 5.png

Jak widać na przedstawionym wykresie proces P0 przesyła do każdego procesu dane o rozmiarze ośmiu milionów bajtów (8 M). Dla każdego procesu wyświetlone zostają statystyki na temat łącznego rozmiaru wysłanych/odebranych danych oraz ich średniej. Obok znajduje się skala przedstawiająca określająca stopień obciążenia danej operacji. W przypadku analizowanej przez nas aplikacji wszystkie wartości mają jeden kolor, ponieważ wszystkie procesy otrzymują dane o tym samym rozmiarze. W przypadku różnego rozmiaru danych, kolor komórek w macierzy byłby zróżnicowany.

  1. Zamykamy wykres Message Profile
  2. Z menu Chart wybieramy Performance Assistant


Performance Assistant przedstawia listę wąskich gardeł w aplikacji, która poddawana jest analizie. W przypadku analizowanej przez nas aplikacji, wygląda ona następująco:
Itac cpu 6.png

Na podstawie przedstawionych na liście danych widzimy, że w analizowanej aplikacji wąskim gardłem jest Late Sender, która trwa przez blisko 8 sekund, co stanowi ponad 86% całkowitego czasu wykonywania aplikacji. Poniżej zawarte są informacje na temat opisu danego problemy, procesów, w których on występuje oraz ich lokalizacji w kodzie. Na podstawie danych przedstawionych w zakładce Description widzimy, że Late Sender jest to sytuacja kiedy proces wywołał funkcję MPI_Recv, zanim proces wysyłający wysłał dane przy pomocy funkcji MPI_Send. W zakładce Attached Processes przedstawione są procesy, u których znaleziono ten problem (są nimi wszystkie procesy poza P0, który rozsyła dane do wszystkich procesów).



< Wstecz

Dalej >