Započnite sa Intel Trace Analyzer i Collector

Započnite-sa-Intel-Trace-Analyzer-and-Collector-proizvodom

Započnite sa Intel® Trace Analyzer i Collector

Koristite ovaj dokument Početak rada i unaprijed prikupljeni trag file da prođete kroz osnovnu analizu performansi MPI sa Intel® Trace Analyzer i Collector.
Intel Trace Analyzer and Collector pomaže u istraživanju efikasnosti korištenja interfejsa za prosljeđivanje poruka (MPI) i identifikaciji komunikacijskih vrućih tačaka, uskih grla sinhronizacije i balansiranja opterećenja. Za više informacija o proizvodu pogledajte stranicu proizvoda Intel Trace Analyzer and Collector.

Preuzmite Intel Trace Analyzer i Collector

  • kao dio Intel® oneAPI HPC Toolkita
  • kao samostalan alat

Preduvjeti

  • Prije pokretanja Intel Trace Analyzer and Collector, provjerite jeste li instalirali najnoviju Intel® MPI biblioteku i Intel® oneAPI DPC++/C++ kompajler ili Intel® Fortran kompajler.
  • Ovo postavlja potrebne varijable okruženja za kompajlere, Intel MPI biblioteku i Intel Trace Analyzer i Collector, i spremni ste za praćenje vaših aplikacija.
  • Za više informacija pogledajte: Sistemski zahtevi za Intel® oneAPI HPC Toolkit.

Razumjeti tok rada

  1. Pratite svoju aplikaciju
  2. Analizirajte najaktivnije MPI funkcije
  3. Identifikujte problematične interakcije
  4. Poboljšajte performanse svoje aplikacije zamjenom funkcije koja uzrokuje problem

Pratite svoju MPI aplikaciju

Generirajte trag file za prikupljanje dnevnika događaja za sljedeću analizu ponašanja aplikacije.

  1. Postavite okruženje za pokretanje Intel® Trace Analyzer i Collector pokretanjem setvars skripte iz oneAPI instalacijskog direktora
    NAPOMENA
    Podrazumevano, Intel Trace Analyzer i Collector su instalirani na /opt/intel/oneapi/itac za Linux* OS i program Files (x86)\Intel\oneAPI\itac\najnoviji za Windows* OS.
    Na Linuxu:
    $ source /opt/intel/oneapi/setvars.sh
    Na Windowsima:
    “C:\Program Files (x86)\Intel\oneAPI\setvars.bat”
  2. Pokrenite svoju MPI aplikaciju i generirajte praćenje s opcijom -trace.
    Na Linuxu:
    $ mpirun -trace -n 4 ./poisson_sendrecv.single
    Na Windowsima:
    Sastavite aplikaciju i prikupite trag.
    Za Intel oneAPI DPC++/C++ kompajler, pokrenite:
    > mpiicc -trace poisson_sendrecv.single.c
    Za Intel Fortran Compiler pokrenite:
    > mpiifort -trace poisson_sendrecv.single.f
    Ovaj example generiše trag (stf*) za asample poisson_sendrcv.single MPI aplikacija
  3. Otvorite generirani .stf file sa Intel Trace Analyzer sa Intel Trace Analyzer i Collector.
    Na Linuxu:
    $ traceanalyzer ./ poisson_sendrecv.single.stf
    Na Windowsima:
    traceanalyzer poisson_sendrecv.single.stf

NAPOMENA
U svrhu testiranja, možete preuzeti unaprijed prikupljeni trag file poisson_sendrecv.single.stf za poisson koji se koristi u ovom dokumentu i otvorite ga pomoću Intel Trace Analyzer i Collector.
.stf file se otvara na stranici sa sažetkom view, koji predstavlja općenite informacije o performansama vaše aplikacije:Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-1Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-2NAPOMENA Za više informacija o funkcijama Intel Trace Analyzer i Collector pogledajte Saznajte više.

Analizirajte najaktivnije MPI funkcije

Analizirajte ponašanje MPI aplikacije, pronađite uska grla i identifikujte serijalizaciju kako biste pronašli načine za poboljšanje performansi aplikacije.

  1. Sa stranice sa sažetkom otvorite vremensku liniju događaja view klikom na Nastavi > Grafikoni > Vremenska linija događaja za dubinsku analizu glavnih MPI funkcija.
    Grafikon prikazuje pojedinačne procesne aktivnosti tokom vremena.
    Rad na aplikaciji je iterativan, pri čemu se svaka iteracija sastoji od računskog dijela i MPI komunikacija.
  2. Identifikujte jednu iteraciju na koju ćete se fokusirati i zumirajte je prevlačenjem miša preko potrebnog vremenskog intervala:Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-3Trag view prikazuje dio unutar traga koji ste odabrali. Grafikon Vremenske linije događaja prikazuje događaje koji su bili aktivni tokom odabrane iteracije.
    • Horizontalne trake predstavljaju procese sa funkcijama koje se nazivaju u tim procesima.
    • Crne linije označavaju poruke koje se šalju između procesa. Ove linije povezuju procese slanja i primanja.
    • Plave linije predstavljaju kolektivne operacije, kao što su operacije emitovanja ili smanjenja.
  3. Prebacite se na Flat Profile karticu (A) da biste bliže pogledali funkcije koje se izvršavaju u vremenskoj tački koju ste (odabrali na vremenskoj liniji događaja.Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-4
  4. Razgrupirajte MPI funkcije za analizu aktivnosti MPI procesa u vašoj aplikaciji.
    Da biste to učinili, kliknite desnim tasterom miša na All Processes > Group MPI (B) u Flat Profile i izaberite UngroupMPI. Ova operacija izlaže pojedinačne MPI pozive.
  5. Analizirajte procese koji komuniciraju sa svojim direktnim susjedima koristeći MPI_Sendrecv na početku iteracije. Za nprample:Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-5
    • a. U sampDakle, MPI_Sendrecv razmjena podataka ima usko grlo: proces ne razmjenjuje podatke sa svojim sljedećim susjedom dok se razmjena sa prethodnim ne završi. Vremenski okviri događaja view prikazuje ovo usko grlo kao stepenište.
    • b. MPI_Allreduce na kraju iteracije ponovo sinkronizira sve procese; zato ovaj blok ima obrnuti izgled stepenica.
  6. Identifikujte serijalizaciju koristeći Function Profile i Message Profile views.
    • a. Otvorite grafikone u isto vrijeme:
      U Function Profile grafikon, otvorite karticu Load Balance.
    • Idite na meni Charts da otvorite Message Profile.
    • b. Na kartici Load Balance proširite MPI_Sendrecv i MPI_Allreduce. Balansiranje opterećenja pokazuje da se vrijeme provedeno u MPI_Sendrecv povećava sa brojem procesa, dok se vrijeme za MPI_Allreduce smanjuje.
    • c. Pregledajte Message Profile Grafikon dolje do donjeg desnog ugla.
      Kodiranje blokova bojama ukazuje na to da je porukama koje putuju s višeg na niži rang potrebno proporcionalno više vremena, dok poruke koje putuju s nižeg na viši rang otkrivaju slabu parno-neparnu vrstu uzorka:Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-6

Rezultati uporedne analize pokazuju da u aplikaciji ne postoje složeni obrasci razmjene, već se razmjena vrši samo sa susjednim procesima. Informacije će biti ključne za poboljšanje performansi vaše aplikacije promjenom komunikacije korak za optimizaciju komunikacijskog modela aplikacije.

Identifikujte disbalansirane komunikacije

Gledajte svoju aplikaciju pod idealnim okolnostima i uporedite originalni trag file sa idealizovanim da bi se izolovale problematične interakcije.

  1. Kreirajte idealizirano file:
    • a. Odaberite Napredno > Idealizacija ili kliknite naZapočnite-sa-Intel-Trace-Analyzer-and-Collector-fig-7 (Idealizacija) dugme na traci sa alatkama.
    • b. Provjerite parametre idealizacije u dijaloškom okviru Idealizacija (idealni trag file naziv i vremenski raspon za konverziju).
    • c. Kliknite Start da idealizirate svoj trag.
  2. Uporedite originalni trag sa idealizovanim tragom:
    • a. Odaberite Napredno > Dijagram neravnoteže ili kliknite na Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-8(Dijagram neravnoteže) dugme na traci sa alatkama.
    • b. U dijagramu neravnoteže kliknite na Otvori drugi File dugme, idite na idealizovani trag i izaberite ga.
    • c. U prozoru Dijagram neravnoteže, kliknite na dugme Total Mode i izaberite Breakdown Mode.

Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-9

Možete vidjeti da je MPI_Sendrecv funkcija koja oduzima najviše vremena. Težina neravnoteže je prikazana u
svijetle boje i čini oko 10% za funkciju MPI_Sendrecv. Ovo je vrijeme koje procesi provode čekajući jedni druge.

Poboljšajte performanse svoje aplikacije promjenom komunikacija

  1. Poboljšajte performanse MPI aplikacije promjenom blokiranja u neblokirajuću komunikaciju.
    U svom kodu zamijenite serijski MPI_Sendrcv sa neblokirajućom komunikacijom: MPI_Isend i MPI_Irecv. Za nprample: Originalni isječak koda:
    // granična razmjena
    razmjena praznina (para* p, mreža* gr){
    int i,j;
    MPI_Status status_100, status_200, status_300, status_400;
    // poslati dolje prvi red
    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);
    // pošalji zadnji red
    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);
    Koristite poređenje Intel Trace Analyzer view da uporedi serijalizovanu aplikaciju sa revidiranom
    // kopiraj lijevu kolonu u tmp nizove
    if(gr->lijevo != MPI_PROC_NULL){
    gr->x_new[i][gr->lcol+1] = right_col[i]; desni_kol[i] = gr->x_nov[i][gr->lcol];
    // poslati desno
    MPI_Send(desni_kol, gr->lrow+2, MPI_DOUBLE, gr->desno, 400, MPI_COMM_WORLD); }
    if(gr->lijevo != MPI_PROC_NULL)
    {
    MPI_Recv(lijevi_col, gr->lrow+2, MPI_DOUBLE, gr->lijevo, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->lrow+2; i++
    {
    gr->x_new[i][0] = left_col[i];
    }
    }
    Ažurirani isječak koda
    MPI_Request req[7];
    // poslati dolje prvi red
    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);
    Jednom ispravljena, pojedinačna iteracija revidirane aplikacije će izgledati kao sljedeći nprample:Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-10
  2. Koristite poređenje Intel Trace Analyzer view da uporedi serijalizovanu aplikaciju sa revidiranom. Usporedite dva traga uz pomoć Poređenje View, ide na View > Uporedite. The Comparison View izgleda slično:Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-11U poređenju View, možete vidjeti da korištenje neblokirajuće komunikacije pomaže u uklanjanju serijalizacije i smanjenju vremena komunikacije procesa.
    NAPOMENA Za više informacija o performansama vaše aplikacije na nivou čvora, pogledajte dokumentaciju za odgovarajuće alate: Intel® VTune™ Profiler MPI analiza koda i analiza Intel® MPI aplikacija koristeći Intel® Advisor.

Saznajte više

Istražite sljedeće resurse za više informacija o Intel Trace Analyzer i Collector.Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-12Započnite-sa-Intel-Trace-Analyzer-and-Collector-fig-13

Obavještenja i odricanja od odgovornosti

  • Intelove tehnologije mogu zahtevati aktiviranje hardvera, softvera ili usluga.
  • Nijedan proizvod ili komponenta ne mogu biti apsolutno sigurni.
  • Vaši troškovi i rezultati mogu varirati.
  • © Intel Corporation. Intel, Intel logo i druge Intel oznake su zaštitni znaci Intel Corporation ili njenih podružnica. Druga imena i robne marke mogu se smatrati vlasništvom drugih.
  • Ovim dokumentom ne daje se nikakva licenca (izričita ili implicirana, estoppelom ili na neki drugi način) za bilo koja prava intelektualne svojine.
  • Opisani proizvodi mogu sadržavati nedostatke u dizajnu ili greške poznate kao greške koje mogu uzrokovati da proizvod odstupi od objavljenih specifikacija. Trenutne karakterizirane greške dostupne su na zahtjev.
  • Intel se odriče svih izričitih i implicitnih garancija, uključujući, bez ograničenja, implicitne garancije za prodaju, prikladnost za određenu svrhu i nekršenje, kao i svaku garanciju koja proizilazi iz toka performansi, načina poslovanja ili upotrebe u trgovini.

Dokumenti / Resursi

intel Započnite sa Intel Trace Analyzer i Collector [pdf] Korisnički priručnik
Započnite sa Intel Trace Analyzer i Collector, Započnite sa Intelom, Trace Analyzer and Collector, Collector

Reference

Ostavite komentar

Vaša email adresa neće biti objavljena. Obavezna polja su označena *