Begin met Intel Trace Analyzer en Collector
Kom aan die gang met Intel® Trace Analyzer and Collector
Gebruik hierdie Kom aan die gang-dokument en 'n voorafversamelde spoor file om deur 'n basiese MPI-prestasie-analise te loop met Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector help om die gebruiksdoeltreffendheid van boodskap-oordrag-koppelvlak (MPI) te verken en kommunikasie-hotspots, sinchronisasie-knelpunte en vragbalansering te identifiseer. Vir meer inligting oor die produk, sien Intel Trace Analyzer and Collector-produkbladsy.
Laai Intel Trace Analyzer and Collector af
- as deel van Intel® oneAPI HPC Toolkit
- as 'n selfstandige hulpmiddel
Voorvereistes
- Voordat jy Intel Trace Analyzer en Collector laat loop, maak seker dat jy die nuutste Intel® MPI Library en Intel® oneAPI DPC++/C++ Compiler of Intel® Fortran Compiler geïnstalleer het.
- Dit stel die vereiste omgewingsveranderlikes vir samestellers, die Intel MPI-biblioteek, en Intel Trace Analyzer and Collector, en jy is gereed om jou toepassings op te spoor.
- Vir meer inligting, sien: Intel® oneAPI HPC Toolkit Stelselvereistes.
Verstaan die werkvloei
- Spoor jou aansoek na
- Ontleed die mees aktiewe MPI-funksies
- Identifiseer problematiese interaksies
- Verbeter jou toepassingsprestasie deur die probleemveroorsakende funksie te vervang
Spoor jou MPI-toepassing na
Genereer 'n spoor file om gebeurtenislogboeke vir die volgende toepassingsgedragsanalise in te samel.
- Stel die omgewing op vir die bekendstelling van die Intel® Trace Analyzer and Collector deur die setvars-skrip vanaf die oneAPI-installasiedirekteur te laat loop
LET WEL
Intel Trace Analyzer and Collector is by verstek geïnstalleer op /opt/intel/oneapi/itac vir Linux* OS en na Program Files (x86)\Intel\oneAPI\itac\nuutste vir Windows* OS.
Op Linux:
$ bron /opt/intel/oneapi/setvars.sh
Op Windows:
“C:\Program Files (x86)\Intel\oneAPI\setvars.bat" - Begin jou MPI-toepassing en genereer 'n spoor met die -trace-opsie.
Op Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
Op Windows:
Stel die toepassing saam en versamel die spoor.
Vir Intel oneAPI DPC++/C++-samesteller, hardloop:
> mpiicc -spoor poisson_sendrecv.single.c
Vir Intel Fortran Compiler, hardloop:
> mpiifort -spoor poisson_sendrecv.single.f
Hierdie example genereer 'n spoor (stf*) vir asample poisson_sendrcv.enkele MPI aansoek - Maak die gegenereerde .stf oop file met Intel Trace Analyzer met Intel Trace Analyzer en versamelaar.
Op Linux:
$ spoorontleder ./ poisson_sendrecv.single.stf
Op Windows:
spoorontleder poisson_sendrecv.single.stf
LET WEL
Vir toetsdoeleindes kan jy 'n voorafversamelde spoor aflaai file poisson_sendrecv.single.stf vir die gif wat in hierdie dokument gebruik word en maak dit oop met Intel Trace Analyzer and Collector.
Die .stf file maak in die Opsommingsbladsy oop view, wat algemene inligting oor jou toepassingprestasie verteenwoordig:LET WEL Vir meer inligting oor Intel Trace Analyzer en Collector-funksionaliteit, sien Leer meer.
Ontleed die mees aktiewe MPI-funksies
Ontleed 'n MPI-toepassingsgedrag, vind knelpunte en identifiseer serialisering om maniere te vind om die toepassingsprestasie te verbeter.
- Op die Opsommingsbladsy maak die Gebeurtenistydlyn oop view deur op Gaan voort > Grafieke > Gebeurtenistydlyn te klik vir diepgaande ontleding van die top MPI-funksies.
Die grafiek toon individuele prosesaktiwiteite oor tyd.
Toepassingswerk is iteratief, waar elke iterasie uit 'n berekeningsdeel en MPI-kommunikasie bestaan. - Identifiseer 'n enkele iterasie om op te fokus en zoem daarop in deur jou muis oor die vereiste tydinterval te sleep:
Die spoor view wys die gedeelte binne die spoor wat jy gekies het. Die Gebeurtenistydlyngrafiek wys die gebeure wat aktief was tydens die geselekteerde iterasie.
- Horisontale stawe verteenwoordig die prosesse met die funksies wat in hierdie prosesse genoem word.
- Swart lyne dui boodskappe aan wat tussen prosesse gestuur word. Hierdie lyne verbind stuur- en ontvangprosesse.
- Blou lyne verteenwoordig kollektiewe bedrywighede, soos uitsaai of verminder bedrywighede.
- Skakel oor na die Flat Profile oortjie (A) om van naderby te kyk na funksies wat uitgevoer word in die tydpunt wat jy ( gekies in die Gebeurtenistydlyn.
- Ontgroepeer MPI-funksies om MPI-prosesaktiwiteit in jou toepassing te ontleed.
Om dit te doen, klik met die rechtermuisknop op die Alle prosesse > Groep MPI ( B) in die Flat Profile en kies UngroupMPI. Hierdie bewerking stel die individuele MPI-oproepe bloot. - Ontleed die prosesse wat met hul direkte bure kommunikeer deur MPI_Sendrecv aan die begin van die iterasie te gebruik. Byvoorbeeldample:
- a. In die sample, die MPI_Sendrecv data-uitruiling het 'n bottelnek: die proses ruil nie data met sy volgende buurman uit totdat die uitruiling met die vorige een voltooi is nie. Die Gebeurtenis Tydlyne view vertoon hierdie bottelnek as 'n trap.
- b. Die MPI_Allreduce aan die einde van die iterasie hersinchroniseer alle prosesse; daarom het hierdie blok die omgekeerde trapvoorkoms.
- Identifiseer serialisering deur die Function Pro te gebruikfile en Message Profile views.
- a. Maak die kaarte terselfdertyd oop:
In die Function Profile grafiek, maak die Load Balancetab oop. - Gaan na die Charts-kieslys om 'n Message Pro oop te maakfile.
- b. Brei MPI_Sendrecv en MPI_Allreduce uit in die Load Balance-oortjie. Die Load Balancing dui aan dat die tyd wat in MPI_Sendrecv spandeer word, toeneem met die prosesnommer, terwyl die tyd vir MPI_Allreduce afneem.
- c. Ondersoek die Message Profile Grafiek af na die onderste regterhoek.
Die kleurkodering van die blokke dui aan dat boodskappe wat van 'n hoër rang na 'n laer rang beweeg, proporsioneel meer tyd benodig, terwyl die boodskappe wat van 'n laer rang na 'n hoër rang reis 'n swak ewe-ewe soort patroon toon:
- a. Maak die kaarte terselfdertyd oop:
Die resultate van die vergelykende analise toon dat daar geen komplekse uitruilpatrone in die toepassing is nie, die uitruil word slegs met naburige prosesse uitgevoer. Die inligting sal noodsaaklik wees vir Verbeter jou toepassingprestasie deur kommunikasie-stap te verander om die kommunikasiemodel van die toepassing te optimaliseer.
Identifiseer ongebalanseerde kommunikasie
Hou jou aansoek dop onder die ideale omstandighede en vergelyk die oorspronklike spoor file met die geïdealiseerde een om problematiese interaksies te isoleer.
- Skep 'n geïdealiseerde file:
- a. Kies Gevorderd > Idealisering of klik die
(Idealisasie) nutsbalkknoppie.
- b. Gaan die idealiseringsparameters na in die Idealisering-dialoogkassie (ideale spoor file naam en tydsbestek vir omskakeling).
- c. Klik Start om jou spoor te idealiseer.
- a. Kies Gevorderd > Idealisering of klik die
- Vergelyk die oorspronklike spoor met die geïdealiseerde spoor:
- a. Kies Gevorderd > Onbalansdiagram of klik die
(Onbalansdiagram) nutsbalkknoppie.
- b. Klik in die dialoogkassie Onbalansdiagram op die Open Another File knoppie, navigeer na die geïdealiseerde spoor en kies dit.
- c. Klik in die venster Onbalansdiagram op die Totale modus-knoppie en kies Afbreekmodus.
- a. Kies Gevorderd > Onbalansdiagram of klik die
Jy kan sien dat MPI_Sendrecv die mees tydrowende funksie is. Die wanbalansgewig word in
ligte kleur en bestaan uit ongeveer 10% vir die MPI_Sendrecv-funksie. Dit is die tyd wat die prosesse spandeer om op mekaar te wag.
Verbeter jou toepassingprestasie deur kommunikasie te verander
- Verbeter die werkverrigting van die MPI-toepassing deur blokkering na nie-blokkerende kommunikasie te verander.
In jou kode vervang die seriële MPI_Sendrcv met nie-blokkerende kommunikasie: MPI_Isend en MPI_Irecv. Byvoorbeeldample: Oorspronklike kodebrokkie:
// grenswisseling
nietige ruil(para* p, rooster* gr){
int i,j;
MPI_Status status_100, status_200, status_300, status_400;
// stuur eerste ry af
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);
// stuur laaste ry op
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);
Gebruik die Intel Trace Analyzer Comparison view om die reeksaansoek met die hersiene te vergelyk
// kopieer linkerkolom na tmp-skikkings
if(gr->links != MPI_PROC_NULL){
gr->x_new[i][gr->lcol+1] = regte_kol[i]; right_col[i] = gr->x_new[i][gr->lcol];
// stuur reg
MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
if(gr->links != MPI_PROC_NULL)
{
MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); vir(i=0; i< gr->lrow+2; i++
{
gr->x_new[i][0] = links_kol[i];
}
}
Opgedateerde kodebrokkie
MPI_Versoek versoek[7];
// stuur eerste ry af
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, versoek, MPI_STATUSES_IGNORE);
Sodra dit reggestel is, sal die enkele iterasie van die hersiene aansoek soos die volgende bvample: - Gebruik die Intel Trace Analyzer Comparison view om die reeksaansoek met die hersiene een te vergelyk. Vergelyk twee spore met behulp van die Vergelyking View, gaan View > Vergelyk. Die Vergelyking View lyk soortgelyk aan:
In die Vergelyking View, kan jy sien dat die gebruik van nie-blokkerende kommunikasie help om serialisering te verwyder en die tyd van kommunikasie van prosesse te verminder.
LET WEL Vir meer inligting oor nodusvlak-werkverrigting van jou toepassing, sien dokumentasie vir die onderskeie gereedskap: Intel® VTune™ Profiler MPI-kode-analise en ontleding van Intel® MPI-toepassings met behulp van Intel® Advisor.
Kom meer te wete
Verken die volgende hulpbronne vir meer inligting oor Intel Trace Analyzer and Collector.
Kennisgewings en vrywarings
- Intel-tegnologieë kan moontlik geaktiveerde hardeware, sagteware of diens benodig.
- Geen produk of komponent kan absoluut veilig wees nie.
- Jou koste en resultate kan verskil.
- © Intel Corporation. Intel, die Intel-logo en ander Intel-merke is handelsmerke van Intel Corporation of sy filiale. Ander name en handelsmerke kan as die eiendom van ander geëis word.
- Geen lisensie (uitdruklik of geïmpliseer, deur estoppel of andersins) tot enige intellektuele eiendomsregte word deur hierdie dokument toegestaan nie.
- Die produkte wat beskryf word, kan ontwerpfoute of foute bevat wat bekend staan as errata wat kan veroorsaak dat die produk van gepubliseerde spesifikasies afwyk. Huidige gekarakteriseerde errata is op aanvraag beskikbaar.
- Intel verwerp alle uitdruklike en geïmpliseerde waarborge, insluitend sonder beperking, die geïmpliseerde waarborge van verhandelbaarheid, geskiktheid vir 'n spesifieke doel, en nie-skending, sowel as enige waarborg wat voortspruit uit die verloop van prestasie, verloop van transaksies of gebruik in handel.
Dokumente / Hulpbronne
![]() |
intel Begin met Intel Trace Analyzer en Collector [pdf] Gebruikersgids Kom aan die gang met Intel Trace Analyzer and Collector, Begin met Intel, Trace Analyzer en Collector, Collector |