Kom igång med Intel Trace Analyzer och Collector

Kom-igång-med-Intel-Trace-Analyzer-and-Collector-produkt

Kom igång med Intel® Trace Analyzer och Collector

Använd detta Kom igång-dokument och en förinsamlad spårning file att gå igenom en grundläggande MPI-prestandaanalys med Intel® Trace Analyzer och Collector.
Intel Trace Analyzer and Collector hjälper till att utforska MPI-användningseffektiviteten och identifiera kommunikationshotspots, flaskhalsar för synkronisering och lastbalansering. För mer information om produkten, se Intel Trace Analyzer and Collector produktsida.

Ladda ner Intel Trace Analyzer and Collector

  • som en del av Intel® oneAPI HPC Toolkit
  • som ett fristående verktyg

Förutsättningar

  • Innan du kör Intel Trace Analyzer och Collector, se till att du har installerat det senaste Intel® MPI-biblioteket och Intel® oneAPI DPC++/C++-kompilatorn eller Intel® Fortran-kompilatorn.
  • Detta ställer in de nödvändiga miljövariablerna för kompilatorer, Intel MPI Library och Intel Trace Analyzer and Collector, och du är redo att spåra dina applikationer.
  • För mer information, se: Systemkrav för Intel® oneAPI HPC Toolkit.

Förstå arbetsflödet

  1. Spåra din ansökan
  2. Analysera de mest aktiva MPI-funktionerna
  3. Identifiera problematiska interaktioner
  4. Förbättra din applikationsprestanda genom att ersätta den problemorsakande funktionen

Spåra din MPI-applikation

Skapa ett spår file för att samla in händelseloggar för följande applikationsbeteendeanalys.

  1. Ställ in miljön för att starta Intel® Trace Analyzer och Collector genom att köra setvars-skriptet från oneAPI installationsdirektören
    NOTERA
    Som standard är Intel Trace Analyzer and Collector installerad på /opt/intel/oneapi/itac för Linux* OS och för att programmera Files (x86)\Intel\oneAPI\itac\senaste för Windows* OS.
    På Linux:
    $ source /opt/intel/oneapi/setvars.sh
    På Windows:
    "C:\Program Files (x86)\Intel\oneAPI\setvars.bat"
  2. Kör din MPI-applikation och generera ett spår med alternativet -trace.
    På Linux:
    $ mpirun -trace -n 4 ./poisson_sendrecv.single
    På Windows:
    Kompilera appen och samla in spåret.
    För Intel oneAPI DPC++/C++-kompilator, kör:
    > mpiicc -spår poisson_sendrecv.single.c
    För Intel Fortran Compiler, kör:
    > mpiifort -spår poisson_sendrecv.single.f
    Detta example genererar ett spår (stf*) för asample poisson_sendrcv.single MPI-applikation
  3. Öppna den genererade .stf file med Intel Trace Analyzer med Intel Trace Analyzer och Collector.
    På Linux:
    $ traceanalyzer ./ poisson_sendrecv.single.stf
    På Windows:
    traceanalyzer poisson_sendrecv.single.stf

NOTERA
För teständamål kan du ladda ner ett förinsamlat spår file poisson_sendrecv.single.stf för giftet som används i detta dokument och öppna det med Intel Trace Analyzer och Collector.
.stf file öppnas på sammanfattningssidan view, som representerar allmän information om din applikations prestanda:Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-1Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-2NOTERA Mer information om Intel Trace Analyzer och Collector-funktioner finns i Läs mer.

Analysera de mest aktiva MPI-funktionerna

Analysera en MPI-applikations beteende, hitta flaskhalsar och identifiera serialisering för att hitta sätt att förbättra applikationens prestanda.

  1. Från sammanfattningssidan öppnar händelsetidslinjen view genom att klicka på Fortsätt > Diagram > Händelsetidslinje för djup analys av de främsta MPI-funktionerna.
    Diagrammet visar individuella processaktiviteter över tid.
    Applikationsarbetet är iterativt, där varje iteration består av en beräkningsdel och MPI-kommunikation.
  2. Identifiera en enstaka iteration att fokusera på och zooma in på den genom att dra musen över det tidsintervall som krävs:Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-3Spåret view visar avsnittet i spåret som du valde. Händelsetidslinjediagrammet visar de händelser som var aktiva under den valda iterationen.
    • Horisontella staplar representerar processerna med de funktioner som anropas i dessa processer.
    • Svarta linjer indikerar meddelanden som skickas mellan processer. Dessa linjer kopplar samman sändnings- och mottagningsprocesser.
    • Blå linjer representerar kollektiv verksamhet, såsom sändning eller reducering av verksamhet.
  3. Byt till Flat Profile flik (A) för att se närmare på funktioner som körs på den tidpunkt du (vald i händelsetidslinjen.Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-4
  4. Dela upp MPI-funktioner för att analysera MPI-processaktivitet i din applikation.
    För att göra detta, högerklicka på Alla processer > Grupp MPI ( B) i Flat Profile och välj UngroupMPI. Denna operation exponerar de individuella MPI-anropen.
  5. Analysera processerna som kommunicerar med sina direkta grannar med hjälp av MPI_Sendrecv i början av iterationen. Till exempelampde:Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-5
    • a. I sample, MPI_Sendrecv-datautbytet har en flaskhals: processen utbyter inte data med sin nästa granne förrän utbytet med det föregående är klart. Eventets tidslinjer view visar denna flaskhals som en trappa.
    • b. MPI_Allreduce i slutet av iterationen omsynkroniserar alla processer; det är därför detta block har det omvända trappans utseende.
  6. Identifiera serialisering med hjälp av Function Profile och Message Profile views.
    • a. Öppna diagrammen samtidigt:
      I Function Profile öppnar du fliken Lastbalans.
    • Gå till sjökortsmenyn för att öppna en Message Profile.
    • b. Expandera MPI_Sendrecv och MPI_Allreduce på fliken Lastbalans. Lastbalanseringen indikerar att tiden som spenderas i MPI_Sendrecv ökar med processnumret, medan tiden för MPI_Allreduce minskar.
    • c. Undersök Message Profile Diagram ner till det nedre högra hörnet.
      Färgkodningen av blocken indikerar att meddelanden som färdas från en högre rankning till en lägre ranking behöver proportionellt sett mer tid medan meddelanden som färdas från en lägre rankning till en högre rankning visar ett svagt jämnt udda mönster:Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-6

Resultaten av den jämförande analysen visar att det inte finns några komplexa utbytesmönster i applikationen, utbytet utförs endast med angränsande processer. Informationen kommer att vara väsentlig för att förbättra din applikationsprestanda genom att ändra kommunikationssteget för att optimera applikationens kommunikationsmodell.

Identifiera obalanserad kommunikation

Titta på din ansökan under idealiska omständigheter och jämför det ursprungliga spåret file med den idealiserade för att isolera problematiska interaktioner.

  1. Skapa en idealiserad file:
    • a. Välj Avancerat > Idealisering eller klicka påKom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-7 (Idealisering) knapp i verktygsfältet.
    • b. Kontrollera idealiseringsparametrarna i dialogrutan Idealisering (ideal trace file namn och tidsintervall för konvertering).
    • c. Klicka på Start för att idealisera ditt spår.
  2. Jämför det ursprungliga spåret med det idealiserade spåret:
    • a. Välj Avancerat > Obalansdiagram eller klicka på Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-8(Obalansdiagram) knapp i verktygsfältet.
    • b. Klicka på Öppna en annan i dialogrutan Obalansdiagram File knappen, navigera till det idealiserade spåret och välj det.
    • c. I fönstret Obalansdiagram, klicka på knappen Totalläge och välj Nedbrytningsläge.

Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-9

Du kan se att MPI_Sendrecv är den mest tidskrävande funktionen. Obalansvikten visas i
ljus färg och omfattar cirka 10 % för funktionen MPI_Sendrecv. Detta är den tid processerna lägger på att vänta på varandra.

Förbättra din applikationsprestanda genom att ändra kommunikation

  1. Förbättra prestandan för MPI-applikationen genom att ändra blockering till icke-blockerande kommunikation.
    I din kod ersätt den seriella MPI_Sendrcv med icke-blockerande kommunikation: MPI_Isend och MPI_Irecv. Till exempelample: Ursprungligt kodavsnitt:
    // gränsbyte
    void exchange(para* p, grid* gr){
    int i,j;
    MPI_Status status_100, status_200, status_300, status_400;
    // skicka ner första raden
    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);
    // skicka upp sista raden
    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);
    Använd Intel Trace Analyzer Comparison view för att jämföra den serialiserade applikationen med den reviderade
    // kopiera vänster kolumn till tmp-arrayer
    if(gr->vänster != MPI_PROC_NULL){
    gr->x_new[i][gr->lcol+1] = right_col[i]; right_col[i] = gr->x_new[i][gr->lcol];
    // skicka rätt
    MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
    if(gr->vänster != 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];
    }
    }
    Uppdaterat kodavsnitt
    MPI_Request req[7];
    // skicka ner första raden
    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);
    När den har korrigerats kommer den enstaka iterationen av den reviderade ansökan att se ut som följande exampde:Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-10
  2. Använd Intel Trace Analyzer Comparison view för att jämföra den serialiserade applikationen med den reviderade. Jämför två spår med hjälp av jämförelsen View, ska View > Jämför. Jämförelsen View ser ut som:Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-11I jämförelsen View, kan du se att användning av icke-blockerande kommunikation hjälper till att ta bort serialisering och minska tiden för kommunikation av processer.
    NOTERA För mer information om nodnivå för din applikation, se dokumentationen för respektive verktyg: Intel® VTune™ Profiler MPI-kodanalys och analys av Intel® MPI-applikationer med Intel® Advisor.

Läs mer

Utforska följande resurser för mer information om Intel Trace Analyzer och Collector.Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-12Kom-igång-med-Intel-Trace-Analyzer-and-Collector-fig-13

Meddelanden och ansvarsfriskrivningar

  • Intel-teknologier kan kräva aktiverad maskinvara, programvara eller tjänstaktivering.
  • Ingen produkt eller komponent kan vara helt säker.
  • Dina kostnader och resultat kan variera.
  • © Intel Corporation. Intel, Intels logotyp och andra Intel-märken är varumärken som tillhör Intel Corporation eller dess dotterbolag. Andra namn och varumärken kan göras anspråk på att vara andras egendom.
  • Ingen licens (uttrycklig eller underförstådd, genom estoppel eller på annat sätt) till några immateriella rättigheter beviljas av detta dokument.
  • De beskrivna produkterna kan innehålla konstruktionsfel eller fel som kallas errata som kan göra att produkten avviker från publicerade specifikationer. Aktuella karakteriserade errata är tillgängliga på begäran.
  • Intel frånsäger sig alla uttryckliga och underförstådda garantier, inklusive utan begränsning, underförstådda garantier om säljbarhet, lämplighet för ett visst ändamål och icke-intrång, såväl som alla garantier som uppstår på grund av prestanda, affärer eller användning i handeln.

Dokument/resurser

intel Kom igång med Intel Trace Analyzer och Collector [pdf] Användarhandbok
Kom igång med Intel Trace Analyzer och Collector, Kom igång med Intel, Trace Analyzer och Collector, Collector

Referenser

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *