Skocz do: nawigacji, wyszukiwania

Amphscs3


Ponowna analiza oraz interpretacja rezultatów


  1. Uruchamiamy ponownie analizę Basic Hotspots dla zmodyfikowanej aplikacji.


Rezultat ponownej analizy wygląda następująco:

Amp hs 6.png

Na podstawie danych przedstawionych w sekcji Eplased Time widzimy, że czas potrzebny na wykonanie aplikacji zmalał do blisko 2,5 sekundy. Zmianie uległy również pozostałe metryki. Dodatkowo pojawiła się nowa sekcja dotycząca zrównoleglenia. Przedstawia on między innymi przez jaki okres czasu aplikacja wykonywana jest sekwencyjnie (Serial Time), jaki jest to odsetek całkowitego czasu działania aplikacji oraz czas wykonania obliczeń w obszarze równoległym. Widzimy, że dwie metryki oznaczone są kolorem różowym (Spin Time oraz Serial Time). Oznacza to, że zdarzenia związane z tymi metrykami negatywnie wpływają na wydajność aplikacji. W przypadku Serial Time rozwiązaniem jest zrównoleglenie pozostałych funkcji aplikacji (odpowiedzialnych za wypełnienie oraz utworzenie macierzy). Patrząc na wykres przedstawiony w sekcji CPU Usage Histogram widzimy, że najwyższy słupek widzimy, że większość czasu aplikacja wykonywana jest przy użyciu 48 logicznych CPU.

  1. Przechodzimy do zakładki Bottom-up
Amp hs 7.png

Jak widać w zakładce Bottom-up funkcja Multipication przez większość czasu wykorzystuje oferowane przez system zasoby w idealny sposób o czym świadczy kolor zielony. Jedna z metryk (Inbalance) związanych z utworzonymi wątkami oznaczona została kolorem różowym. Jest ona związana jest z synchronizacją wątków, która w przypadku analizowanej aplikacji zajmuje stosunkowo dużo czasu CPU. Patrząc na wykres przedstawiający wydajność wątków (znajdujący się poniżej) widzimy, że rozkład obciążeń pomiędzy wątki nie jest wystarczająco dobry (z czym wiąże się właśnie metryka Inbalance oraz Spin Time), co negatywnie wpływa na wydajność aplikacji.



Rozwiązanie problemu


  1. Otwieramy plik matrix.cpp przy pomocy dowolnego edytora tekstowego
  2. Do konstrukcji #pragma omp parallel for dodajemy dyrektywę określającą sposób podziału iteracji pętli pomiędzy pętli wątki celu zrównoważenia ich obciążeń schedule(dynamic)
  3. Zapisujemy zmiany
  4. Uruchamiamy terminal
  5. Używając polecenia cd przechodzimy do katalogu, w którym znajduje się analizowana aplikacja
  6. Budujemy aplikację wpisując polecenie make



< Wstecz

Dalej >