Introdução ao Intel Trace Analyzer and Collector
Introdução ao Intel® Trace Analyzer and Collector
Use este documento de introdução e um rastreamento pré-coletado file para percorrer uma análise básica de desempenho de MPI com o Intel® Trace Analyzer and Collector.
O Intel Trace Analyzer and Collector ajuda a explorar a eficiência de uso da interface de passagem de mensagens (MPI) e a identificar pontos de acesso de comunicação, gargalos de sincronização e balanceamento de carga. Para obter mais informações sobre o produto, consulte a página do produto Intel Trace Analyzer and Collector.
Baixe o Intel Trace Analyzer and Collector
- como parte do Intel® oneAPI HPC Toolkit
- como uma ferramenta autônoma
Pré-requisitos
- Antes de executar o Intel Trace Analyzer and Collector, certifique-se de ter instalado a biblioteca Intel® MPI mais recente e o compilador Intel® oneAPI DPC++/C++ ou o compilador Intel® Fortran.
- Isso define as variáveis de ambiente necessárias para compiladores, a Biblioteca Intel MPI e o Intel Trace Analyzer and Collector, e você está pronto para rastrear seus aplicativos.
- Para obter mais informações, consulte: Requisitos do sistema Intel® oneAPI HPC Toolkit.
Entenda o fluxo de trabalho
- Rastreie sua inscrição
- Analise as funções MPI mais ativas
- Identificar interações problemáticas
- Melhore o desempenho do aplicativo substituindo a função causadora de problemas
Rastreie sua aplicação MPI
Gerar um rastreamento file para coletar logs de eventos para a seguinte análise de comportamento do aplicativo.
- Configure o ambiente para iniciar o Intel® Trace Analyzer and Collector executando o script setvars do diretor de instalação oneAPI
OBSERVAÇÃO
Por padrão, o Intel Trace Analyzer and Collector é instalado em /opt/intel/oneapi/itac para sistema operacional Linux* e no programa Files (x86)\Intel\oneAPI\itac\latest para sistema operacional Windows*.
No Linux:
$ fonte /opt/intel/oneapi/setvars.sh
No Windows:
“C:\Program Files (x86)\Intel\oneAPI\setvars.bat” - Execute seu aplicativo MPI e gere um rastreamento com a opção -trace.
No Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
No Windows:
Compile o aplicativo e colete o rastreamento.
Para o compilador Intel oneAPI DPC++/C++, execute:
> mpiicc -trace poisson_sendrecv.single.c
Para Intel Fortran Compiler, execute:
> mpiifort -trace poisson_sendrecv.single.f
Este example gera um rastreamento (stf*) para asample poisson_sendrcv.single aplicativo MPI - Abra o .stf gerado file com Intel Trace Analyzer com Intel Trace Analyzer and Collector.
No Linux:
$ traceanalyzer./ poisson_sendrecv.single.stf
No Windows:
traceanalyzer poisson_sendrecv.single.stf
OBSERVAÇÃO
Para fins de teste, você pode baixar um rastreamento pré-coletado file poisson_sendrecv.single.stf para o poisson usado neste documento e abra-o com o Intel Trace Analyzer and Collector.
o .stf file abre na página de resumo view, que representa informações gerais sobre o desempenho do seu aplicativo:OBSERVAÇÃO Para obter mais informações sobre a funcionalidade Intel Trace Analyzer e Collector, consulte Saiba mais.
Analise as funções MPI mais ativas
Analise o comportamento de um aplicativo MPI, encontre gargalos e identifique a serialização para encontrar maneiras de melhorar o desempenho do aplicativo.
- Na página de resumo, abra a linha do tempo do evento view clicando em Continue > Charts > Event Timeline para uma análise profunda das principais funções MPI.
O gráfico exibe as atividades individuais do processo ao longo do tempo.
O trabalho do aplicativo é iterativo, onde cada iteração consiste em uma parte computacional e comunicações MPI. - Identifique uma única iteração para focar e amplie-a arrastando o mouse sobre o intervalo de tempo necessário:
o rastro view mostra a seção dentro do traço que você selecionou. O gráfico Event Timeline mostra os eventos que estavam ativos durante a iteração selecionada.
- As barras horizontais representam os processos com as funções chamadas nesses processos.
- Linhas pretas indicam mensagens enviadas entre processos. Essas linhas conectam os processos de envio e recebimento.
- As linhas azuis representam operações coletivas, como operações de transmissão ou redução.
- Mudar para o Flat Profile guia (A) para ver mais de perto as funções em execução no ponto de tempo que você (selecionou na Linha do tempo do evento.
- Desagrupe as funções MPI para analisar a atividade do processo MPI em seu aplicativo.
Para fazer isso, clique com o botão direito do mouse em Todos os processos > Grupo MPI (B) no Flat Profile e escolha UngroupMPI. Esta operação expõe as chamadas MPI individuais. - Analise os processos que se comunicam com seus vizinhos diretos usando MPI_Sendrecv no início da iteração. por exampem:
- a. no sample, a troca de dados MPI_Sendrecv tem um gargalo: o processo não troca dados com seu próximo vizinho até que a troca com o anterior seja concluída. Os cronogramas do evento view exibe esse gargalo como uma escada.
- b. O MPI_Allreduce no final da iteração ressincroniza todos os processos; é por isso que este bloco tem a aparência de escada invertida.
- Identifique a serialização, usando o Function Profile e Mensagem Profissionalfile views.
- a. Abra os gráficos ao mesmo tempo:
Na Função Profissionalfile gráfico, abra a guia Load Balance. - Vá para o menu Gráficos para abrir um Message Profile.
- b. Na guia Load Balance, expanda MPI_Sendrecv e MPI_Allreduce. O Load Balancing indica que o tempo gasto em MPI_Sendrecv aumenta com o número do processo, enquanto o tempo gasto em MPI_Allreduce diminui.
- c. Examine o Message Profile Gráfico até o canto inferior direito.
O código de cores dos blocos indica que as mensagens que viajam de uma classificação mais alta para uma mais baixa precisam proporcionalmente de mais tempo, enquanto as mensagens que viajam de uma classificação mais baixa para uma mais alta revelam um tipo de padrão par-ímpar fraco:
- a. Abra os gráficos ao mesmo tempo:
Os resultados da análise comparativa mostram que não há padrões de troca complexos no aplicativo, a troca é realizada apenas com processos vizinhos. As informações serão essenciais para a etapa Melhorar o desempenho do seu aplicativo alterando as comunicações para otimizar o modelo de comunicação do aplicativo.
Identifique comunicações desequilibradas
Observe sua aplicação nas circunstâncias ideais e compare o traço original file com o idealizado para isolar interações problemáticas.
- Crie um idealizado file:
- a. Selecione Avançado > Idealização ou clique no botão
(Idealização) botão da barra de ferramentas.
- b. Verifique os parâmetros de idealização na caixa de diálogo Idealização (traço ideal file nome e intervalo de tempo para conversão).
- c. Clique em Iniciar para idealizar seu traçado.
- a. Selecione Avançado > Idealização ou clique no botão
- Compare o traço original com o traço idealizado:
- a. Selecione Avançado > Diagrama de Desequilíbrio ou clique no botão
(Diagrama de Desequilíbrio) botão da barra de ferramentas.
- b. Na caixa de diálogo Diagrama de desequilíbrio, clique no botão Abrir outro File botão, navegue até o traço idealizado e selecione-o.
- c. Na janela Diagrama de desbalanceamento, clique no botão Modo total e selecione Modo de divisão.
- a. Selecione Avançado > Diagrama de Desequilíbrio ou clique no botão
Você pode ver que MPI_Sendrecv é a função que consome mais tempo. O peso de desbalanceamento é exibido em
cor clara e compreende cerca de 10% para a função MPI_Sendrecv. Este é o tempo que os processos passam esperando uns pelos outros.
Melhore o desempenho do seu aplicativo alterando as comunicações
- Melhore o desempenho do aplicativo MPI alterando as comunicações de bloqueio para não bloqueio.
Em seu código, substitua o serial MPI_Sendrcv pela comunicação sem bloqueio: MPI_Isend e MPI_Irecv. por example: Trecho de código original:
// troca de limite
troca nula(para* p, grade* gr){
int i, j;
MPI_Status status_100, status_200, status_300, status_400;
// envia a primeira linha
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);
// envia última linha
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);
Use a comparação do Intel Trace Analyzer view para comparar o aplicativo serializado com o revisado
// copia a coluna da esquerda para arrays tmp
if(gr->esquerda != MPI_PROC_NULL){
gr->x_new[i][gr->lcol+1] = col_direita[i]; col_direita[i] = gr->x_new[i][gr->lcol];
// enviar certo
MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
if(gr->esquerda != 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] = col_esquerda[i];
}
}
Trecho de código atualizado
Solicitação MPI_Request[7];
// envia a primeira linha
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);
Depois de corrigida, a iteração única do aplicativo revisado se parecerá com o exemplo a seguirampem: - Use a comparação do Intel Trace Analyzer view para comparar o aplicativo serializado com o revisado. Compare dois traços com a ajuda da Comparação View, vou View > Comparar. A comparação View parece semelhante a:
na comparação View, você pode ver que usar a comunicação sem bloqueio ajuda a remover a serialização e diminuir o tempo de comunicação dos processos.
OBSERVAÇÃO Para obter mais informações sobre o desempenho no nível do nó do seu aplicativo, consulte a documentação das respectivas ferramentas: Intel® VTune™ Profiler Análise de código MPI e análise de aplicativos Intel® MPI usando o Intel® Advisor.
Saber mais
Explore os seguintes recursos para obter mais informações sobre o Intel Trace Analyzer and Collector.
Avisos e isenções de responsabilidade
- As tecnologias Intel podem exigir ativação de hardware, software ou serviço habilitada.
- Nenhum produto ou componente pode ser absolutamente seguro.
- Seus custos e resultados podem variar.
- ©Intel Corporation. Intel, o logotipo da Intel e outras marcas da Intel são marcas comerciais da Intel Corporation ou de suas subsidiárias. Outros nomes e marcas podem ser reivindicados como propriedade de terceiros.
- Nenhuma licença (expressa ou implícita, por preclusão ou de outra forma) para quaisquer direitos de propriedade intelectual é concedida por este documento.
- Os produtos descritos podem conter defeitos de projeto ou erros conhecidos como errata, que podem fazer com que o produto se desvie das especificações publicadas. Erratas caracterizadas atuais estão disponíveis mediante solicitação.
- A Intel se isenta de todas as garantias expressas e implícitas, incluindo, sem limitação, as garantias implícitas de comercialização, adequação a uma finalidade específica e não violação, bem como qualquer garantia decorrente do curso de desempenho, curso de negociação ou uso no comércio.
Documentos / Recursos
![]() |
intel Introdução ao Intel Trace Analyzer and Collector [pdf] Guia do Usuário Introdução ao Intel Trace Analyzer and Collector, Introdução ao Intel, Trace Analyzer and Collector, Collector |