Inizia con Intel Trace Analyzer and Collector
Inizia con Intel® Trace Analyzer and Collector
Usa questo documento Inizia e una traccia pre-raccolta file per eseguire un'analisi delle prestazioni MPI di base con Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector aiuta a esplorare l'efficienza di utilizzo dell'interfaccia di passaggio dei messaggi (MPI) e a identificare gli hotspot di comunicazione, i colli di bottiglia nella sincronizzazione e il bilanciamento del carico. Per ulteriori informazioni sul prodotto, vedere la pagina del prodotto Intel Trace Analyzer e Collector.
Scarica Intel Trace Analyzer and Collector
- come parte di Intel® oneAPI HPC Toolkit
- come strumento autonomo
Prerequisiti
- Prima di eseguire Intel Trace Analyzer and Collector, assicurarsi di aver installato la libreria Intel® MPI più recente e il compilatore Intel® oneAPI DPC++/C++ o il compilatore Intel® Fortran.
- Questo imposta le variabili di ambiente richieste per i compilatori, la libreria Intel MPI e Intel Trace Analyzer and Collector, e sei pronto per tracciare le tue applicazioni.
- Per ulteriori informazioni, vedere: Intel® oneAPI HPC Toolkit Requisiti di sistema.
Comprendere il flusso di lavoro
- Traccia la tua domanda
- Analizzare le funzioni MPI più attive
- Identificare le interazioni problematiche
- Migliora le prestazioni dell'applicazione sostituendo la funzione che causa il problema
Traccia la tua applicazione MPI
Genera una traccia file per raccogliere registri eventi per la seguente analisi del comportamento dell'applicazione.
- Configurare l'ambiente per l'avvio di Intel® Trace Analyzer and Collector eseguendo lo script setvars dalla directory di installazione di oneAPI
NOTA
Per impostazione predefinita, Intel Trace Analyzer and Collector è installato in /opt/intel/oneapi/itac per il sistema operativo Linux* e in Program Files (x86)\Intel\oneAPI\itac\latest per il sistema operativo Windows*.
Su Linux:
$ fonte /opt/intel/oneapi/setvars.sh
Su Windows:
“C:\Program Files (x86)\Intel\oneAPI\setvars.bat" - Eseguire l'applicazione MPI e generare una traccia con l'opzione -trace.
Su Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
Su Windows:
Compila l'app e raccogli la traccia.
Per il compilatore Intel oneAPI DPC++/C++, eseguire:
> mpiicc -trace poisson_sendrecv.single.c
Per il compilatore Intel Fortran, eseguire:
> mpiifort -trace poisson_sendrecv.single.f
Questo example genera una traccia (stf*) per asample poisson_sendrcv.singola applicazione MPI - Apri il file .stf generato file con Intel Trace Analyzer con Intel Trace Analyzer e Collector.
Su Linux:
$ traceanalyzer ./ poisson_sendrecv.single.stf
Su Windows:
analizzatore di tracce poisson_sendrecv.single.stf
NOTA
A scopo di test, è possibile scaricare una traccia pre-raccolta file poisson_sendrecv.single.stf per il poisson utilizzato in questo documento e aprirlo con Intel Trace Analyzer and Collector.
Il file .stf file si apre nella pagina di riepilogo view, che rappresenta informazioni generali sulle prestazioni dell'applicazione:NOTA Per ulteriori informazioni sulla funzionalità Intel Trace Analyzer e Collector, vedere Ulteriori informazioni.
Analizza le funzioni MPI più attive
Analizza il comportamento di un'applicazione MPI, trova i colli di bottiglia e identifica la serializzazione per trovare i modi per migliorare le prestazioni dell'applicazione.
- Dalla pagina di riepilogo apri la sequenza temporale dell'evento view facendo clic su Continua > Grafici > Cronologia eventi per un'analisi approfondita delle principali funzioni MPI.
Il grafico mostra le singole attività di processo nel tempo.
Il lavoro dell'applicazione è iterativo, in cui ogni iterazione consiste in una parte computazionale e comunicazioni MPI. - Identifica una singola iterazione su cui concentrarti e ingrandiscila trascinando il mouse sull'intervallo di tempo richiesto:
La traccia view mostra la sezione all'interno della traccia selezionata. Il grafico della sequenza temporale degli eventi mostra gli eventi che erano attivi durante l'iterazione selezionata.
- Le barre orizzontali rappresentano i processi con le funzioni chiamate in questi processi.
- Le linee nere indicano i messaggi inviati tra i processi. Queste linee collegano i processi di invio e ricezione.
- Le linee blu rappresentano operazioni collettive, come operazioni di trasmissione o riduzione.
- Passa al Flat Profile scheda (A) per dare un'occhiata più da vicino alle funzioni in esecuzione nel punto temporale selezionato nell'Event Timeline.
- Separa le funzioni MPI per analizzare l'attività del processo MPI nella tua applicazione.
Per fare ciò, fare clic con il pulsante destro del mouse su Tutti i processi > Gruppo MPI (B) in Flat Profile e scegliere SeparaMPI. Questa operazione espone le singole chiamate MPI. - Analizza i processi che comunicano con i loro vicini diretti utilizzando MPI_Sendrecv all'inizio dell'iterazione. Per esampon:
- UN. Nella sample, lo scambio di dati MPI_Sendrecv ha un collo di bottiglia: il processo non scambia dati con il suo vicino successivo finché lo scambio con quello precedente non è completo. Le tempistiche degli eventi view mostra questo collo di bottiglia come una scala.
- B. MPI_Allreduce alla fine dell'iterazione risincronizza tutti i processi; ecco perché questo blocco ha l'aspetto della scala inversa.
- Identificare la serializzazione, utilizzando Function Profile e Messaggio Profile views.
- UN. Apri i grafici contemporaneamente:
Nella funzione Profile grafico, aprire la scheda Bilanciamento del carico. - Vai al menu Grafici per aprire un messaggio Profile.
- B. Nella scheda Bilanciamento del carico, espandere MPI_Sendrecv e MPI_Allreduce. Il bilanciamento del carico indica che il tempo trascorso in MPI_Sendrecv aumenta con il numero del processo, mentre il tempo per MPI_Allreduce diminuisce.
- C. Esamina il messaggio Profile Grafico fino all'angolo in basso a destra.
La codifica a colori dei blocchi indica che i messaggi che viaggiano da un rango superiore a un rango inferiore richiedono proporzionalmente più tempo mentre i messaggi che viaggiano da un rango inferiore a un rango superiore rivelano un modello di tipo pari-dispari debole:
- UN. Apri i grafici contemporaneamente:
I risultati dell'analisi comparativa mostrano che non ci sono schemi di scambio complessi nell'applicazione, lo scambio viene effettuato solo con processi vicini. Le informazioni saranno essenziali per il passaggio Migliora le prestazioni dell'applicazione modificando le comunicazioni per ottimizzare il modello di comunicazione dell'applicazione.
Identificare le comunicazioni sbilanciate
Guarda la tua applicazione nelle circostanze ideali e confronta la traccia originale file con quella idealizzata per isolare le interazioni problematiche.
- Crea un idealizzato file:
- UN. Selezionare Avanzate > Idealizzazione o fare clic su
(Idealizzazione) pulsante della barra degli strumenti.
- B. Controllare i parametri di idealizzazione nella finestra di dialogo Idealizzazione (ideal trace file nome e intervallo di tempo per la conversione).
- C. Fare clic su Avvia per idealizzare la traccia.
- UN. Selezionare Avanzate > Idealizzazione o fare clic su
- Confronta la traccia originale con la traccia idealizzata:
- UN. Selezionare Avanzate > Diagramma di squilibrio o fare clic su
(Diagramma di squilibrio) nella barra degli strumenti.
- B. Nella finestra di dialogo Diagramma squilibrio, fare clic su Apri un altro File , passare alla traccia idealizzata e selezionarla.
- C. Nella finestra Diagramma squilibrio, fare clic sul pulsante Modalità totale e selezionare Modalità ripartizione.
- UN. Selezionare Avanzate > Diagramma di squilibrio o fare clic su
Puoi vedere che MPI_Sendrecv è la funzione che richiede più tempo. Il peso di squilibrio viene visualizzato in
colore chiaro e comprende circa il 10% per la funzione MPI_Sendrecv. Questo è il tempo che i processi trascorrono aspettandosi l'un l'altro.
Migliora le prestazioni delle tue applicazioni modificando le comunicazioni
- Migliora le prestazioni dell'applicazione MPI modificando il blocco delle comunicazioni in non blocco.
Nel tuo codice sostituisci il seriale MPI_Sendrcv con la comunicazione non bloccante: MPI_Isend e MPI_Irecv. Per esample: Frammento di codice originale:
// scambio di confini
scambio vuoto(para* p, griglia* gr){
int i, j;
MPI_Status stato_100, stato_200, stato_300, stato_400;
// invia la prima riga
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,
&stato_100);
// invia l'ultima riga
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);
Utilizzare il confronto di Intel Trace Analyzer view per confrontare l'applicazione serializzata con quella rivista
// copia la colonna di sinistra negli array tmp
if(gr->left != MPI_PROC_NULL){
gr->x_new[i][gr->lcol+1] = right_col[i]; right_col[i] = gr->x_new[i][gr->lcol];
// invia a destra
MPI_Send(col_destra, gr->riga+2, MPI_DOUBLE, gr->destra, 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];
}
}
Frammento di codice aggiornato
MPI_Request richiesta[7];
// invia la prima riga
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, richiesta, MPI_STATUSES_IGNORE);
Una volta corretta, la singola iterazione dell'applicazione riveduta avrà l'aspetto del seguente esampon: - Utilizzare il confronto di Intel Trace Analyzer view per confrontare l'applicazione serializzata con quella rivista. Confronta due tracce con l'aiuto del Confronto View, andando a View > Confronta. Il confronto View sembra simile a:
Nel Confronto View, puoi vedere che l'utilizzo della comunicazione non bloccante aiuta a rimuovere la serializzazione e ridurre il tempo di comunicazione dei processi.
NOTA Per ulteriori informazioni sulle prestazioni a livello di nodo dell'applicazione, vedere la documentazione per i rispettivi strumenti: Intel® VTune™ Profiler Analisi del codice MPI e analisi delle applicazioni Intel® MPI mediante Intel® Advisor.
Saperne di più
Esplora le seguenti risorse per ulteriori informazioni su Intel Trace Analyzer and Collector.
Avvisi e dichiarazioni di non responsabilità
- Le tecnologie Intel potrebbero richiedere l'attivazione di hardware, software o servizi abilitati.
- Nessun prodotto o componente può essere assolutamente sicuro.
- I tuoi costi e risultati possono variare.
- © Intel Corporation. Intel, il logo Intel e altri marchi Intel sono marchi di Intel Corporation o delle sue consociate. Altri nomi e marchi possono essere rivendicati come proprietà di altri.
- Il presente documento non concede alcuna licenza (espressa o implicita, per preclusione o altro) su alcun diritto di proprietà intellettuale.
- I prodotti descritti possono contenere difetti di progettazione o errori noti come errata che possono causare la deviazione del prodotto dalle specifiche pubblicate. Le errata caratterizzate correnti sono disponibili su richiesta.
- Intel declina tutte le garanzie esplicite e implicite, incluse, a titolo esemplificativo, le garanzie implicite di commerciabilità, idoneità per uno scopo particolare e non violazione, nonché qualsiasi garanzia derivante dal corso delle prestazioni, dal modo di trattare o dall'uso commerciale.
Documenti / Risorse
![]() | intel Introduzione a Intel Trace Analyzer and Collector [pdf] Guida utente Inizia con Intel Trace Analyzer e Collector, Inizia con Intel, Trace Analyzer e Collector, Collector |