Începeți cu Intel Trace Analyzer și Collector

Începeți cu produsul Intel Trace Analyzer și Collector

Începeți cu Intel® Trace Analyzer and Collector

Folosiți acest document Începeți și o urmă precolectată file pentru a parcurge o analiză de bază a performanței MPI cu Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector ajută la explorarea eficienței utilizării interfeței de transmitere a mesajelor (MPI) și la identificarea punctelor fierbinți de comunicare, a blocajelor de sincronizare și a echilibrării sarcinii. Pentru mai multe informații despre produs, consultați pagina produsului Intel Trace Analyzer and Collector.

Descărcați Intel Trace Analyzer and Collector

  • ca parte a Intel® oneAPI HPC Toolkit
  • ca instrument de sine stătător

Cerințe preliminare

  • Înainte de a rula Intel Trace Analyzer and Collector, asigurați-vă că ați instalat cea mai recentă bibliotecă Intel® MPI și Intel® oneAPI DPC++/C++ Compiler sau Intel® Fortran Compiler.
  • Aceasta setează variabilele de mediu necesare pentru compilatoare, Intel MPI Library și Intel Trace Analyzer and Collector și sunteți gata să vă urmăriți aplicațiile.
  • Pentru mai multe informații, consultați: Cerințe de sistem pentru Intel® oneAPI HPC Toolkit.

Înțelegeți fluxul de lucru

  1. Urmăriți aplicația dvs
  2. Analizați cele mai active funcții MPI
  3. Identificați interacțiunile problematice
  4. Îmbunătățiți performanța aplicației prin înlocuirea funcției care cauzează probleme

Urmăriți aplicația dvs. MPI

Generați o urmă file pentru a colecta jurnalele de evenimente pentru următoarea analiză a comportamentului aplicației.

  1. Configurați mediul pentru lansarea Intel® Trace Analyzer and Collector rulând scriptul setvars din directorul de instalare oneAPI
    NOTA
    În mod implicit, Intel Trace Analyzer and Collector este instalat în /opt/intel/oneapi/itac pentru sistemul de operare Linux* și în Program Files (x86)\Intel\oneAPI\itac\latest pentru sistemul de operare Windows*.
    Pe Linux:
    $ source /opt/intel/oneapi/setvars.sh
    Pe Windows:
    „C:\Program Files (x86)\Intel\oneAPI\setvars.bat”
  2. Rulați aplicația dvs. MPI și generați o urmă cu opțiunea -trace.
    Pe Linux:
    $ mpirun -trace -n 4 ./poisson_sendrecv.single
    Pe Windows:
    Compilați aplicația și colectați urma.
    Pentru Intel oneAPI DPC++/C++ Compiler, rulați:
    > mpiicc -trace poisson_sendrecv.single.c
    Pentru Intel Fortran Compiler, rulați:
    > mpiifort -trace poisson_sendrecv.single.f
    Acest exampchiul generează o urmă (stf*) pentru asample poisson_sendrcv.single MPI application
  3. Deschideți fișierul .stf generat file cu Intel Trace Analyzer cu Intel Trace Analyzer și Collector.
    Pe Linux:
    $ traceanalyzer ./ poisson_sendrecv.single.stf
    Pe Windows:
    traceanalyzer poisson_sendrecv.single.stf

NOTA
În scopuri de testare, puteți descărca o urmă precolectată file poisson_sendrecv.single.stf pentru poisson utilizat în acest document și deschideți-l cu Intel Trace Analyzer și Collector.
.stf file se deschide în Pagina Rezumat view, care reprezintă informații generale despre performanța aplicației dvs.:Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-1Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-2NOTA Pentru mai multe informații despre funcționalitatea Intel Trace Analyzer și Collector, consultați Aflați mai multe.

Analizați cele mai active funcții MPI

Analizați comportamentul unei aplicații MPI, găsiți blocajele și identificați serializarea pentru a găsi modalități de îmbunătățire a performanței aplicației.

  1. Din pagina Rezumat, deschideți Cronologia evenimentului view făcând clic pe Continuare > Diagrame > Cronologia evenimentelor pentru o analiză profundă a funcțiilor MPI de top.
    Graficul afișează activitățile individuale ale procesului de-a lungul timpului.
    Lucrarea aplicației este iterativă, unde fiecare iterație constă dintr-o parte computațională și comunicații MPI.
  2. Identificați o singură iterație pe care să vă concentrați și măriți-o trăgând mouse-ul peste intervalul de timp necesar:Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-3Urma view arată secțiunea din urmă pe care ați selectat-o. Diagrama cronologic al evenimentelor arată evenimentele care au fost active în timpul iterației selectate.
    • Barele orizontale reprezintă procesele cu funcțiile numite în aceste procese.
    • Liniile negre indică mesajele trimise între procese. Aceste linii conectează procesele de trimitere și recepție.
    • Liniile albastre reprezintă operațiuni colective, cum ar fi operațiunile de difuzare sau de reducere.
  3. Treceți la Flat Profile fila (A) pentru a avea o privire mai atentă asupra funcțiilor care se execută în momentul pe care l-ați selectat ( selectat în Cronologia evenimentului.Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-4
  4. Degrupați funcțiile MPI pentru a analiza activitatea procesului MPI din aplicația dvs.
    Pentru a face acest lucru, faceți clic dreapta pe Toate procesele > Grup MPI ( B) în Flat Profile și alegeți UngroupMPI. Această operațiune expune apelurile MPI individuale.
  5. Analizați procesele care comunică cu vecinii lor direcți folosind MPI_Sendrecv la începutul iterației. De examppe:Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-5
    • o. În sample, schimbul de date MPI_Sendrecv are un blocaj: procesul nu face schimb de date cu următorul său vecin până când schimbul cu cel anterior este complet. Cronologia evenimentelor view afișează acest blocaj ca o scară.
    • b. MPI_Allreduce la sfârșitul iterației resincronizează toate procesele; de aceea acest bloc are aspectul de scară inversă.
  6. Identificați serializarea, folosind Function Profile și Message Profile views.
    • o. Deschideți diagramele în același timp:
      În funcția Profile diagramă, deschideți fila Load Balance.
    • Accesați meniul Charts pentru a deschide un Message Profile.
    • b. În fila Load Balance, extindeți MPI_Sendrecv și MPI_Allreduce. Load Balancing indică faptul că timpul petrecut în MPI_Sendrecv crește odată cu numărul procesului, în timp ce timpul pentru MPI_Allreduce scade.
    • c. Examinați mesajul Profile Grafică în colțul din dreapta jos.
      Codarea de culori a blocurilor indică faptul că mesajele care călătoresc de la un rang superior la un rang inferior au nevoie proporțional de mai mult timp, în timp ce mesajele care călătoresc de la un rang inferior la un rang superior dezvăluie un tip slab par-impar:Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-6

Rezultatele analizei comparative arată că nu există modele de schimb complexe în aplicație, schimbul se efectuează numai cu procese învecinate. Informațiile vor fi esențiale pentru îmbunătățirea performanței aplicației prin schimbarea comunicațiilor, pentru a optimiza modelul de comunicare al aplicației.

Identificați comunicațiile dezechilibrate

Urmăriți-vă aplicația în circumstanțe ideale și comparați urma inițială file cu cel idealizat pentru a izola interacţiunile problematice.

  1. Creați un idealizat file:
    • o. Selectați Avansat > Idealizare sau faceți clic peÎncepeți-cu-Intel-Trace-Analyzer-și-Collector-fig-7 butonul (Idealizare) din bara de instrumente.
    • b. Verificați parametrii de idealizare în caseta de dialog Idealizare (urma ideală file numele și intervalul de timp pentru conversie).
    • c. Faceți clic pe Start pentru a vă idealiza urma.
  2. Comparați urma inițială cu urma idealizată:
    • o. Selectați Avansat > Diagrama de dezechilibru sau faceți clic pe Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-8butonul din bara de instrumente (Diagrama de dezechilibru).
    • b. În caseta de dialog Diagrama de dezechilibru, faceți clic pe Deschideți altul File butonul, navigați la urma idealizată și selectați-o.
    • c. În fereastra Diagrama de dezechilibru, faceți clic pe butonul Mod total și selectați Modul de defalcare.

Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-9

Puteți vedea că MPI_Sendrecv este funcția care consumă cel mai mult timp. Greutatea de dezechilibru este afișată în
culoare deschisă și cuprinde aproximativ 10% pentru funcția MPI_Sendrecv. Acesta este timpul pe care procesele îl petrec așteaptă unul pe celălalt.

Îmbunătățiți-vă performanța aplicației prin schimbarea comunicațiilor

  1. Îmbunătățiți performanța aplicației MPI prin schimbarea comunicațiilor de blocare în comunicații neblocante.
    În codul dvs. înlocuiți seria MPI_Sendrcv cu comunicații neblocante: MPI_Isend și MPI_Irecv. De example: Fragment de cod original:
    // schimb de hotar
    void exchange(para* p, grid* gr){
    int i,j;
    MPI_Status status_100, status_200, status_300, status_400;
    // trimite în jos primul rând
    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);
    // trimite ultimul rând
    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);
    Utilizați comparația Intel Trace Analyzer view pentru a compara aplicația serializată cu cea revizuită
    // copiază coloana din stânga în tablourile tmp
    if(gr->left != MPI_PROC_NULL){
    gr->x_new[i][gr->lcol+1] = dreapta_col[i]; dreapta_col[i] = gr->x_new[i][gr->lcol];
    // trimite dreapta
    MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
    if(gr->stânga != 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] = stânga_col[i];
    }
    }
    Fragment de cod actualizat
    MPI_Request req[7];
    // trimite în jos primul rând
    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);
    Odată corectată, singura iterație a aplicației revizuite va arăta ca următorul examppe:Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-10
  2. Utilizați comparația Intel Trace Analyzer view pentru a compara aplicația serializată cu cea revizuită. Comparați două urme cu ajutorul Comparației View, mergând la View > Comparați. Comparația View arata asemanator cu:Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-11În Comparație View, puteți vedea că utilizarea comunicării neblocante ajută la eliminarea serializării și la reducerea timpului de comunicare a proceselor.
    NOTA Pentru mai multe informații despre performanța la nivel de nod a aplicației dvs., consultați documentația pentru instrumentele respective: Intel® VTune™ Profiler Analiza codului MPI și analiza aplicațiilor Intel® MPI folosind Intel® Advisor.

Află mai multe

Explorați următoarele resurse pentru mai multe informații despre Intel Trace Analyzer și Collector.Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-12Începeți-cu-Intel-Trace-Analyzer-și-Collector-fig-13

Notificări și declinări de răspundere

  • Tehnologiile Intel pot necesita activarea hardware-ului, software-ului sau serviciilor activate.
  • Niciun produs sau componentă nu poate fi absolut sigur.
  • Costurile și rezultatele dvs. pot varia.
  • © Intel Corporation. Intel, sigla Intel și alte mărci Intel sunt mărci comerciale ale Intel Corporation sau ale subsidiarelor sale. Alte nume și mărci pot fi revendicate ca fiind proprietatea altora.
  • Acest document nu acordă nicio licență (expressă sau implicită, prin excludere sau în alt mod) pentru niciun drept de proprietate intelectuală.
  • Produsele descrise pot conține defecte de proiectare sau erori cunoscute sub numele de errate care pot determina abaterea produsului de la specificațiile publicate. Errata caracterizate curente sunt disponibile la cerere.
  • Intel declină toate garanțiile exprese și implicite, inclusiv, fără limitare, garanțiile implicite de vandabilitate, potrivire pentru un anumit scop și neîncălcare, precum și orice garanție care decurge din cursul performanței, cursul tranzacțiilor sau utilizarea în comerț.

Documente/Resurse

intel Începeți cu Intel Trace Analyzer și Collector [pdfGhid de utilizare
Începeți cu Intel Trace Analyzer și Collector, Începeți cu Intel, Trace Analyzer și Collector, Collector

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *