Rozpocznij pracę z narzędziem Intel Trace Analyzer i Collector
Rozpocznij pracę z analizatorem i modułem zbierającym śledzenie Intel®
Skorzystaj z tego dokumentu Wprowadzenie i wstępnie zebranego śladu file aby przejść przez podstawową analizę wydajności MPI za pomocą narzędzia Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector pomaga zbadać efektywność wykorzystania interfejsu przesyłania komunikatów (MPI) i zidentyfikować gorące punkty komunikacji, wąskie gardła synchronizacji i równoważenie obciążenia. Więcej informacji o produkcie można znaleźć na stronie produktu Intel Trace Analyzer and Collector.
Pobierz narzędzie Intel Trace Analyzer i moduł zbierający
- jako część zestawu narzędzi Intel® oneAPI HPC Toolkit
- jako samodzielne narzędzie
Wymagania wstępne
- Przed uruchomieniem Intel Trace Analyzer and Collector upewnij się, że zainstalowałeś najnowszą bibliotekę Intel® MPI i kompilator Intel® oneAPI DPC++/C++ lub kompilator Intel® Fortran.
- Spowoduje to ustawienie wymaganych zmiennych środowiskowych dla kompilatorów, biblioteki Intel MPI oraz narzędzia Intel Trace Analyzer and Collector i można przystąpić do śledzenia aplikacji.
- Aby uzyskać więcej informacji, zobacz: Wymagania systemowe zestawu narzędzi Intel® oneAPI HPC Toolkit.
Zrozum przepływ pracy
- Śledź swoją aplikację
- Przeanalizuj najbardziej aktywne funkcje MPI
- Zidentyfikuj problematyczne interakcje
- Popraw wydajność aplikacji, zastępując funkcję powodującą problem
Śledź swoją aplikację MPI
Wygeneruj ślad file do zbierania dzienników zdarzeń na potrzeby poniższej analizy zachowania aplikacji.
- Skonfiguruj środowisko do uruchamiania narzędzia Intel® Trace Analyzer i Collector, uruchamiając skrypt setvars z poziomu dyrektora instalacji oneAPI
NOTATKA
Domyślnie narzędzie Intel Trace Analyzer and Collector jest instalowane w katalogu /opt/intel/oneapi/itac dla systemu operacyjnego Linux* i w programie Program Files (x86)\Intel\oneAPI\itac\latest dla systemu operacyjnego Windows*.
W systemie Linux:
$ źródło /opt/intel/oneapi/setvars.sh
W systemie Windows:
„C:\Program Files (x86)\Intel\oneAPI\setvars.bat” - Uruchom aplikację MPI i wygeneruj ślad za pomocą opcji -trace.
W systemie Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
W systemie Windows:
Skompiluj aplikację i zbierz ślad.
W przypadku kompilatora Intel oneAPI DPC++/C++ uruchom:
> mpiicc -trace poisson_sendrecv.single.c
W przypadku kompilatora Intel Fortran uruchom:
> mpiifort -trace poisson_sendrecv.single.f
Ten byłyample generuje ślad (stf*) dla asample poisson_sendrcv.single aplikacja MPI - Otwórz wygenerowany plik .stf file z Intel Trace Analyzer z Intel Trace Analyzer i Collector.
W systemie Linux:
$ traceanalyzer ./ poisson_sendrecv.single.stf
W systemie Windows:
analizator śledzenia poisson_sendrecv.single.stf
NOTATKA
Do celów testowych możesz pobrać wstępnie zebrany ślad file poisson_sendrecv.single.stf dla poissona użytego w tym dokumencie i otwórz go za pomocą narzędzia Intel Trace Analyzer and Collector.
Plik .stf file otwiera się na Stronie Podsumowanie view, który reprezentuje ogólne informacje o wydajności aplikacji:NOTATKA Aby uzyskać więcej informacji na temat funkcji Intel Trace Analyzer i Collector, zobacz Dowiedz się więcej.
Przeanalizuj najbardziej aktywne funkcje MPI
Analizuj zachowanie aplikacji MPI, znajdź wąskie gardła i zidentyfikuj serializację, aby znaleźć sposoby na poprawę wydajności aplikacji.
- Na Stronie Podsumowanie otwórz Oś Czasu Wydarzenia view klikając Kontynuuj > Wykresy > Oś czasu zdarzeń, aby uzyskać głębszą analizę najważniejszych funkcji MPI.
Wykres przedstawia poszczególne działania procesu w czasie.
Praca z aplikacją ma charakter iteracyjny, gdzie każda iteracja składa się z części obliczeniowej i komunikacji MPI. - Zidentyfikuj pojedynczą iterację, na której chcesz się skupić, i powiększ ją, przeciągając myszką po wymaganym przedziale czasu:
Ślad view pokazuje sekcję wybranego śladu. Wykres Oś czasu zdarzeń przedstawia zdarzenia, które były aktywne podczas wybranej iteracji.
- Poziome słupki reprezentują procesy z funkcjami wywoływanymi w tych procesach.
- Czarne linie wskazują komunikaty przesyłane pomiędzy procesami. Linie te łączą procesy wysyłania i odbierania.
- Niebieskie linie przedstawiają operacje zbiorowe, takie jak operacje rozgłaszania lub ograniczania.
- Przejdź na Flat Profile zakładkę (A), aby przyjrzeć się bliżej funkcjom wykonywanym w wybranym przez Ciebie momencie czasu (wybranym na osi czasu zdarzenia.
- Rozgrupuj funkcje MPI, aby analizować aktywność procesów MPI w aplikacji.
Aby to zrobić, kliknij prawym przyciskiem myszy Wszystkie procesy > Grupa MPI (B) w Flat Profile i wybierz opcję RozgrupujMPI. Ta operacja udostępnia poszczególne wywołania MPI. - Przeanalizuj procesy komunikujące się ze swoimi bezpośrednimi sąsiadami za pomocą MPI_Sendrecv na początku iteracji. Na przykładampna:
- A. W sample, wymiana danych MPI_Sendrecv ma wąskie gardło: proces nie wymienia danych z kolejnym sąsiadem, dopóki wymiana z poprzednim nie zostanie zakończona. Harmonogramy wydarzeń view przedstawia to wąskie gardło jako klatkę schodową.
- B. MPI_Allreduce na końcu iteracji resynchronizuje wszystkie procesy; dlatego też bryła ta ma wygląd odwróconej klatki schodowej.
- Zidentyfikuj serializację za pomocą Function Profile i Wiadomość Profile views.
- A. Otwórz jednocześnie wykresy:
W Funkcji Profile wykresie, otwórz kartę Bilans obciążenia. - Przejdź do menu Wykresy, aby otworzyć Message Profile.
- B. Na karcie Bilans obciążenia rozwiń MPI_Sendrecv i MPI_Allreduce. Równoważenie obciążenia wskazuje, że czas spędzony w MPI_Sendrecv rośnie wraz z numerem procesu, podczas gdy czas MPI_Allreduce maleje.
- C. Sprawdź Message Profile Wykres w dół do prawego dolnego rogu.
Kodowanie kolorami bloków wskazuje, że wiadomości podróżujące z wyższej rangi do niższej rangi potrzebują proporcjonalnie więcej czasu, podczas gdy wiadomości podróżujące z niższej rangi do wyższej rangi wykazują słaby parzysto-nieparzysty wzór:
- A. Otwórz jednocześnie wykresy:
Wyniki analizy porównawczej wskazują, że w aplikacji nie ma skomplikowanych wzorców wymiany, wymiana odbywa się jedynie z procesami sąsiednimi. Informacje te będą niezbędne do poprawy wydajności aplikacji poprzez zmianę komunikacji, aby zoptymalizować model komunikacji aplikacji.
Zidentyfikuj niezrównoważoną komunikację
Obejrzyj swoją aplikację w idealnych okolicznościach i porównaj oryginalny ślad file z wyidealizowanym w celu wyizolowania problematycznych interakcji.
- Stwórz wyidealizowany file:
- A. Wybierz opcję Zaawansowane > Idealizacja lub kliknij
Przycisk paska narzędzi (Idealizacja).
- B. Sprawdź parametry idealizacji w oknie dialogowym Idealizacja (ideal traci file nazwa i zakres czasu konwersji).
- C. Kliknij Start, aby wyidealizować swój ślad.
- A. Wybierz opcję Zaawansowane > Idealizacja lub kliknij
- Porównaj oryginalny ślad ze śladem wyidealizowanym:
- A. Wybierz Zaawansowane > Diagram niewyważenia lub kliknij
(Wykres niewyważenia) na pasku narzędzi.
- B. W oknie dialogowym Diagram braku równowagi kliknij opcję Otwórz inny File , przejdź do wyidealizowanego śladu i wybierz go.
- C. W oknie Wykres niewyważenia kliknij przycisk Tryb całkowity i wybierz Tryb awarii.
- A. Wybierz Zaawansowane > Diagram niewyważenia lub kliknij
Widać, że MPI_Sendrecv jest funkcją najbardziej czasochłonną. Wyświetlana jest masa niewyważenia
jasny kolor i stanowi około 10% dla funkcji MPI_Sendrecv. Jest to czas, jaki procesy spędzają na oczekiwaniu na siebie.
Popraw wydajność aplikacji, zmieniając komunikację
- Popraw wydajność aplikacji MPI, zmieniając komunikację blokującą na nieblokującą.
W swoim kodzie zastąp serial MPI_Sendrcv komunikacją nieblokującą: MPI_Isend i MPI_Irecv. Na przykładample: Oryginalny fragment kodu:
// wymiana granic
unieważnij wymianę(para* p, siatka* gr){
int i, j;
MPI_Status status_100, status_200, status_300, status_400;
// wyślij pierwszy wiersz
MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
&status_100);
// wyślij ostatni wiersz
MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
MPI_Recv(gr->x_new[0], gr->lcol+2, MPI_DOUBLE, gr->down, 200, MPI_COMM_WORLD, &status_200);
Skorzystaj z narzędzia porównawczego Intel Trace Analyzer view aby porównać serializowaną aplikację z poprawioną wersją
// skopiuj lewą kolumnę do tablic tmp
if(gr->lewo != MPI_PROC_NULL){
gr->x_new[i][gr->lcol+1] = prawy_kol[i]; right_col[i] = gr->x_new[i][gr->lcol];
//wyślij w prawo
MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
if(gr->left != MPI_PROC_NULL)
{
MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->lrow+2; i++
{
gr->x_new[i][0] = left_col[i];
}
}
Zaktualizowany fragment kodu
MPI_Request żądanie [7];
// wyślij pierwszy wiersz
MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
…..
MPI_Waitall(7, req, MPI_STATUSES_IGNORE);
Po poprawieniu pojedyncza iteracja poprawionej aplikacji będzie wyglądać następująco, npampna: - Skorzystaj z narzędzia porównawczego Intel Trace Analyzer view aby porównać serializowaną aplikację z poprawioną. Porównaj dwa ślady za pomocą porównania View, idę do View > Porównaj. Porównanie View wygląda podobnie do:
W porównaniu Viewwidać, że korzystanie z komunikacji nieblokującej pomaga usunąć serializację i skrócić czas komunikacji procesów.
NOTATKA Więcej informacji na temat wydajności aplikacji na poziomie węzła można znaleźć w dokumentacji odpowiednich narzędzi: Intel® VTune™ Profiler Analiza kodu MPI i analizowanie aplikacji Intel® MPI za pomocą programu Intel® Advisor.
Dowiedz się więcej
Zapoznaj się z poniższymi zasobami, aby uzyskać więcej informacji na temat narzędzia Intel Trace Analyzer i modułu zbierającego.
Uwagi i zastrzeżenia
- Technologie Intel mogą wymagać aktywacji sprzętu, oprogramowania lub usługi.
- Żaden produkt ani komponent nie może być całkowicie bezpieczny.
- Twoje koszty i wyniki mogą się różnić.
- © Intel Corporation. Intel, logo Intel i inne znaki Intel są znakami towarowymi firmy Intel Corporation lub jej oddziałów. Inne nazwy i marki mogą być przedmiotem praw własności innych osób.
- Niniejszy dokument nie udziela żadnej licencji (wyraźnej lub dorozumianej, na zasadzie estoppel lub w inny sposób) na jakiekolwiek prawa własności intelektualnej.
- Opisane produkty mogą zawierać wady konstrukcyjne lub błędy znane jako errata, które mogą powodować odchylenie produktu od opublikowanych specyfikacji. Aktualne scharakteryzowane errata są dostępne na żądanie.
- Firma Intel zrzeka się wszelkich wyraźnych i dorozumianych gwarancji, w tym między innymi dorozumianych gwarancji przydatności handlowej, przydatności do określonego celu i nienaruszalności, jak również wszelkich gwarancji wynikających z przebiegu działania, przebiegu transakcji lub użycia w handlu.
Dokumenty / Zasoby
![]() | intel Rozpocznij pracę z analizatorem śledzenia i modułem zbierającym Intel Trace [plik PDF] Instrukcja użytkownika Rozpocznij korzystanie z narzędzia Intel Trace Analyzer i modułu zbierającego, Rozpocznij korzystanie z Intel, narzędzia Trace Analyzer i modułu zbierającego, Moduł zbierający |