Ajuste de Desempenho de Aplicativos C/C++ com o Performance Advisor no Rational Developer para Power

O Performance Advisor, introduzido no IBM Rational Developer para Software de Power Systems 8.5, fornece um conjunto rico de ferramentas que permitem obter um desempenho melhor dos seus aplicativos em C/C++ que executam em IBM Power Systems. Neste tutorial, Mike Kucera apresenta as principais funcionalidades do Performance Advisor e mostra como melhorar o desempenho de um aplicativo de exemplo.

Mike Kucera, Software Developer, IBM

author photoMike Kucera é membro da equipe de desenvolvedores do Performance Advisor e causou um grande impacto no design da interface com o usuário. Também é committer no projeto de software livre do CDT Eclipse.



16/Jul/2012

Visão geral do Performance Advisor

O release 8.5 do IBM® Rational® Developer para Power Systems Software™ apresentou um novo componente chamado Performance Advisor, que fornece um conjunto rico de recursos para ajuste de desempenho em aplicativos em C e C++ em IBM® AIX® e IBM® PowerLinux™.

O Performance Advisor é fácil de usar e muito eficiente. Se você é iniciante em ajuste de desempenho, verá que o Performance Advisor é uma ótima forma de começar, porque a interface com o usuário é simples e a ferramenta fornece muito feedback e orientação. Se você tem experiência em ajuste de desempenho, encontrará um conjunto rico de ferramentas que podem ser usadas para isolar e corrigir problemas de desempenho efetivamente.

O Rational Developer para Power Systems Software (muitas vezes denominado RD Power ou RDp extraoficialmente) já é renomado por suas ferramentas de desenvolvimento e depuração, e o Performance Advisor se integra bem a elas. É possível usar o Performance Advisor como uma ferramenta autônoma ou integrá-lo totalmente ao seu código, desenvolvimento, teste ou ciclo de depuração já existente.

Este tutorial apresenta um dia na vida de um usuário do Performance Advisor.


Entendendo o ajuste de desempenho

Antes de iniciar o tutorial, vamos dar uma olhada debaixo do capô para ver como o Performance Advisor funciona.

De onde vêm os dados de desempenho

O Performance Advisor reúne dados de várias fontes. Os dados brutos de desempenho do aplicativo vêm de ferramentas de sistema operacional de baixo nível que fornecem uma amostra do estado do processador e da memória a intervalos regulares. As informações sobre depuração geradas pelo compilador permitem que esses dados sejam correlacionados ao código fonte original. Os compiladores XLC podem gerar arquivos de relatório que fornecem informações sobre otimizações realizadas durante a compilação. Finalmente, os sistemas de runtime e desenvolvimento do aplicativo são analisados para determinar se há possíveis problemas ambientais.

Todos esses dados são reunidos, correlacionados, analisados e apresentados automaticamente de uma forma rápida de acessar e fácil de entender. Isso facilita muito a determinação das melhores estratégias para otimizar o seu aplicativo.

Obtendo uma amostra do ponteiro de instrução

A principal fonte de dados de desempenho no AIX é o comando tprof (no Linux, a ferramenta equivalente é OProfile).

Enquanto o seu aplicativo está executando, tprof despertará a cada 10 milissegundos aproximadamente para registrar uma amostra do estado do ponteiro de instrução do processador, que contém o endereço de memória da instrução que está em execução. Cada amostra é chamada de tick. Após a conclusão da execução de desempenho, as informações sobre depuração geradas pelo compilados são usadas para correlacionar cada tick à sua linha correspondente no código fonte. A partir desses dados correlacionados, é possível identificar quais partes do programa executam mais vezes. Essas partes são chamadas de ativas e geralmente são o melhor lugar para começar a procurar oportunidades de otimizar o código do programa.

Armadilhas dos dados de desempenho baseados em amostras

Pode haver vários processos executando no sistema de destino ao mesmo tempo que o perfil do aplicativo está sendo traçado. É comum que muitos dos sejam atribuídos a processos em competição. Por isso, é melhor executar em um sistema relativamente "tranquilo". A situação ideal seria ter uma máquina dedicada para o teste de desempenho.

Já que os dados brutos se baseiam em amostragem, o aumento do número de amostras aumenta a relevância estatística dos dados coletados. Sugerimos que o aplicativo cujo perfil está traçado execute por pelo menos 30 segundos — de preferência muito mais. Pode-se fazer isso escolhendo um conjunto de entrada que faça o aplicativo executar por um período longo ou usando um script para executar o aplicativo várias vezes em um loop.

É possível executar tprof diretamente a partir da linha de comandos do AIX, mas usá-lo dessa forma pode ser muito difícil. É altamente configurável e toma muitas opções de linha de comandos. Os arquivos de dados brutos que ele gera são muito grandes e sua análise manual pode ser muito demorada. O Performance Advisor usa o tprof para reunir os dados brutos de desempenho, mas isso é feito de forma transparente. Portanto, como usuário final, você nunca precisa lidar diretamente com essas ferramentas de baixo nível.

Obtendo amostras da pilha de chamada

Os dados de amostra da pilha de chamada também são coletados a partir das ferramentas de sistema de baixo nível. Esses dados veem do comando procstack no AIX e do comando OProfile no Linux.

As amostras da pilha de chamada do aplicativo são obtidas a intervalos regulares, e todas as funções do aplicativo que estão executando são registradas. Em seguida, é possível explorar os caminhos da chamada do tempo de execução para acessar qualquer função do seu interesse usando um visualizador gráfico. Com essas informações, é possível responder perguntas como: "Essa função está ativa porque a sua execução demora demais ou porque é chamada muitas vezes?"

Relatório System Scorecard

O desempenho do seu aplicativo também depende da forma de desenvolvimento e do ambiente em que ele executa. Muitas vezes, uma simples mudança no desenvolvimento ou no ambiente de tempo de execução pode ter um grande impacto no desempenho do aplicativo, sem necessidade de mudar o seu código fonte.

O Performance Advisor analisa os hosts de desenvolvimento e tempo de execução e atribui a eles uma pontuação baseada em vários critérios, como hardware, sistema operacional, versão do compilador e opções de desenvolvimento. É gerado um relatório chamado System Scorecard que fornece recomendações de como melhorar a configuração do sistema para que o aplicativo tenha um desempenho melhor. É um bom lugar para começar se você estiver procurando frutas fáceis de colher.

Relatórios de transformação do compilador

Os compiladores XLC podem produzir arquivos de relatório em XML que descrevem otimizações realizadas durante a compilação. Esses relatórios não são obrigatórios, mas se eles forem gerados, haverá mais informações disponíveis para análise. Uma das coisas mais interessantes que esses relatórios revelam é o local das chamadas de função que foram sequenciadas durante a compilação.


Tutorial: usando o Performance Advisor para melhorar o desempenho de um aplicativo C++

É possível usar o Performance Advisor para analisar e comparar o desempenho de um aplicativo em várias máquinas que executam AIX ou PowerLinux mas, para simplificar, trataremos do ajuste de desempenho em uma única máquina com AIX.

Um aplicativo de amostra chamado RayTracer é fornecido na seção Downloads , porque ele será usado durante este artigo. O RayTracer é um pequeno aplicativo em C++ que gera arquivos de imagem que retratam várias formas geométricas. Usaremos o Performance Advisor para melhorar de forma incrementa o desempenho desse aplicativo e para comparar o seu desempenho com uma linha de base durante o processo.

É possível fazer o download do programa de amostra RayTracer e seguir a demonstração, mas lembre-se de que os resultados de desempenho dependem do sistema em que o aplicativo executa. Portanto, você obterá valores diferentes dos mostrados nos exemplos a seguir.

Pré-requisito:

Será necessário ter acesso a um servidor AIX com XLC 11.1 e o componente do servidor Rational Developer para Power Systems Software instalado.

Introdução

  1. Comece alternando para a perspectiva Performance Advisor (Window > Open Perspective > Other > Performance Advisor).
Figura 1. Perspectiva Performance Advisor
Perspectiva Performance Advisor

A primeira coisa a fazer é uma conexão à máquina remota onde o aplicativo será desenvolvido e executará.

  1. Localize a visualização Remote Systems e, sob New Connection, clique com o botão direito do mouse no nó AIX , selecione New Connection, e, em seguida, siga o assistente.
Figura 2. Criando uma nova conexão
Criando uma nova conexão

Em seguida, precisamos de um projeto remoto em C++, que usaremos para editar e desenvolver o nosso aplicativo.

  1. Extraia o código fonte do RayTracer para uma pasta da máquina remota.
  2. No menu principal, selecione New > Remote C/C++ Project.
Figura 3. Criando um projeto remoto em C/C++
Criando um projeto remoto em C/C++
  1. Siga o assistente para configurar o projeto. (Há alguns tipos diferentes de projetos remotos no Rational Developer para Power Systems Software, mas o Performance Advisor suporta todos eles.)
Figura 4. O assistente do novo projeto remoto em C/C++
O assistente do novo projeto remoto em C/C++

Desenvolvendo o aplicativo

Para coletar dados de desempenho no nível de linha, é necessário compilar o aplicativo com informações sobre depuração ativadas. No caso dos compiladores XLC e GCC, isso é feito passando a opção -g . Além disso, se você está usando o XLC, precisará da opção -qlistfmt=xml=all para gerar relatórios de transformação em XML durante uma criação.

Para ter uma visão geral mais detalhada das opções do compilador usadas pelo Performance Advisor, consulte a documentação. O makefile fornecido com o RayTracer usa as opções corretas para o XLC na plataforma AIX.

Criando uma configuração de ativação

Queremos ter a capacidade de ativar o aplicativo RayTracer de dentro do IDE.

  1. A partir do menu principal, selecione Run > Run Configurations.
Figura 5. A janela de diálogo Run Configurations
A janela de diálogo Run Configurations
  1. Na janela de diálogo, clique duas vezes em Remote Compiled Application e, em seguida, busque o local do arquivo executável do RayTracer.

Dica:
Se você clicar no botão Run , verá que o RayTracer é ativado na máquina remota e a saída de console é mostrada localmente na Console View.

Criando uma sessão de ajuste de desempenho

Agora vem a parte legal — fazer o ajuste de desempenho do aplicativo.

A principal visualização do Performance Advisor é a Performance Explorer . A partir daí, é possível iniciar execuções de desempenho, organizar os dados e analisar os resultados.

As execuções de desempenho são organizadas usando dois artefatos: Sessions e Activities. Cada atividade representa uma única execução de desempenho do aplicativo; a sessão é simplesmente uma lista de atividades. Há dois tipos de atividades: System Scorecard e Hotspot Detection. Ambos serão abordados nas etapas a seguir.

  1. Para criar uma sessão, clique no botão da barra de ferramentas New Session na parte superior da visualização Performance Explorer para abrir o assistente New Performance Tuning Session.
Figura 6. Botão da barra de ferramentas New Session
Botão da barra de ferramentas New Session
Figura 7. Assistente New Performance Tuning Session, primeira página
Assistente New Performance Tuning Session, primeira página

É possível usar o assistente New Performance Tuning Session para configurar cenários complexos, como ajustar aplicativos grandes em várias máquinas. Entretanto, neste tutorial, configuraremos um cenário simples no qual desenvolvemos e ajustamos o nosso pequeno aplicativo RayTracer em uma única máquina.

A primeira página do assistente solicita as seguintes informações:

  • Nome da sessão
  • Build host: o Rational Developer para Power Systems Software 8.5 apresenta um novo recurso que permite a sincronização de um projeto remoto em mais de um host. Nos projetos que usam esse recurso, você selecionaria o host de desenvolvimento neste ponto. Esse tutorial usa apenas um host — portanto, o valor padrão é correto.
  • Runtime host: o Performance Advisor suporta um cenário em que é possível desenvolver em um host, mas executar a execução de desempenho em outro host. Isso se destina a organizações que têm máquinas de teste de desempenho dedicadas ou aos casos em que você quer testar o seu aplicativo em uma máquina diferente daquela em que você o desenvolveu, mas não quer copiar todos os arquivos do projeto para lá. Neste tutorial, deixe o host do tempo de execução igual ao host de desenvolvimento.
  • Temporary data directory: durante a coleta de dados de desempenho, alguns arquivos temporários são criados. É necessário fornecer uma pasta para armazenar esses arquivos durante a execução (são excluídos automaticamente depois da execução). Clique no botão Use Default para escolher um local padrão sob o seu diretório inicial.
  1. Depois de fornecer as informações, clique em Next.
Figura 8. Assistente New Performance Tuning Session, segunda página
Assistente New Performance Tuning Session, segunda página

Na segunda página do assistente, você fornece o local de vários executáveis e bibliotecas compartilhadas que constituem o aplicativo. Essas informações são usadas para fornecer recomendações mais precisas (esses dados também podem ser atualizados depois da criação da sessão).

  1. Navegue para o local do arquivo executável do RayTracer e inclua-o na lista de executáveis.
  2. Clique em Next.
Figura 9. Assistente New Performance Tuning Session, terceira página
Assistente New Performance Tuning Session, terceira página

A terceira página solicitará a criação de uma System Scorecard Activity juntamente com a nova sessão. É recomendável fazer isso se você está ajustando o desempenho de uma máquina remota específica pela primeira vez. Nesta página, é possível especificar uma versão mínima e uma versão preferencial da plataforma Power. Se você fizer isso, as recomendações geradas posteriormente focarão nas plataformas mais importantes para você.

  1. Para este exemplo simples, mantenha os valores padrão e clique em Finish.

A nova sessão e atividade aparecem na visualização Performance Explorer.

Figura 10. Performance Explorer com a nova sessão e atividade
Performance Explorer com a nova sessão e atividade

Executando o System Scorecard

A atividade System Scorecard inicia no estado new , indicando que está pronto para executar. O painel inferior do Performance Explorer é usado para executar atividades.

  1. Selecione a atividade System Scorecard e clique no botão Begin Data Collection .
Figura 11. Executando uma atividade System Scorecard
Executando uma atividade System Scorecard

A atividade passa para o estado running . Em segundo plano, o Performance Advisor está analisando o host de tempo de execução e o executável. Quando esse processo é concluído, a atividade passa para o estado complete . Agora o tempo de conclusão aparece ao lado da atividade.

  1. Clique duas vezes na atividade para abrir o Scorecard Viewer.
Figura 12. O visualizador System Scorecard
O visualizador System Scorecard

Aqui (Figura 12), podemos ver que não estamos adotando algumas melhores práticas importantes. Inicialmente, o RayTracer foi desenvolvido sem ativar a otimização do compilador.

  1. Vamos ver o que podemos fazer em relação a isso clicando no link que diz 2 recommendations para abrir a visualização Recommendations.

A visualização Recommendations mostra as recomendações geradas automaticamente referentes à atividade selecionada no momento. Cada recomendação indica um Confidence Level. Quanto mais alto o nível de confiança, maior é a possibilidade de que a recomendação tenha um impacto positivo no desempenho.

Figura 13. A visualização Recommendations
A visualização Recommendations

O Performance Advisor determinou que o aplicativo deve ser desenvolvido novamente usando a opção do compilador -O . Esta é uma forma rápida e fácil de melhorar o desempenho.

O aumento dos níveis de otimização provavelmente também aumentará o tempo necessário para concluir uma criação. O Performance Advisor recomendará seletivamente aumentos de nível de otimização especificamente para as partes mais ativas do aplicativo. Dessa forma, você obtém o maior benefício otimizando as partes ativas do aplicativo e, ao mesmo tempo, evita gastar tempo otimizando partes que têm pouco efeito no desempenho geral.

Estabelecendo uma linha de base

O Performance Advisor recomendou a recriação do RayTracer com um nível de otimização mais alto do compilador. Contudo, antes de fazer isso, é bom estabelecer uma linha de base para comparação. Isso significa executar uma execução de desempenho do aplicativo antes de fazer mudanças.

  1. Clique com o botão direito na sessão e selecione New Activity.
  2. Crie uma nova atividade de Hotspot Detection, nomeie-a como Hotspot Detection 1 e use a configuração de ativação criada anteriormente.
Figura 14. A janela New Activity
A janela New Activity

A nova atividade aparecerá na visualização Performance Explorer.

Figura 15. Paerformance Explorer com detecção de pontos ativos
Paerformance Explorer com detecção de pontos ativos
  1. Selecione a nova atividade e clique no botão Launch Program and Collect Data.
  2. Quando a atividade estiver concluída, clique com o botão direto nela e selecione Set as Baseline.
Figura 16. Estabelecendo a linha de base
Estabelecendo a linha de base
Figura 17. A atividade de linha de base
A atividade de linha de base

Comparando execuções de desempenho

  1. Abra o makefile, inclua -O2 nas opções do compilador e desenvolva novamente o aplicativo.
Figura 18. O editor de makefile
O editor de makefile

Agora vamos ver o efeito que isso tem no desempenho do aplicativo.

  1. Crie outra atividade Hotspot Detection, nomeie-a como Hotspot Detection 2 e execute-a.
  2. Quando a atividade estiver concluída, clique nela com o botão direito e selecione Compare with Baseline.

O navegador Hotspots Comparison mostrado na Figure 19 se abre.

Figura 19. Navegador Hotspots Comparison
Navegador Hotspots Comparison

Esse visualizador compara os resultados das duas execuções de desempenho. Na parte superior do visualizador, ele diz que o aplicativo ficou aproximadamente duas vezes mais rápido. É um grande resultado obtido com uma mudança tão pequena!


Analisando os dados de desempenho

Agora vamos tentar alterar o aplicativo propriamente dito. Entretanto, antes de fazer isso, precisamos examinar os dados de desempenho e determinar qual alteração devemos fazer.

Navegador Hotspots

Clique duas vezes na atividade Hotspot Detection 2 para abrir o navegador Hotspots.

Figura 20. Navegador Hotspots
Navegador Hotspots

A área esquerda da janela do navegador Hotspots mostra a árvore de hierarquia de processos. Essa árvore mostra todos os processos e encadeamentos que foram amostrados durante a execução de desempenho.

Funções de filtragem e localização

O navegador Hotspot tem dois recursos que facilitam a localização daquilo que você está procurando:

  • É possível criar filtros referentes à árvore de processos. De fato, os nós My Application e Other Processes são apenas filtros predefinidos. Quaisquer filtros customizados que você criar ficarão listados sob o nó My Filters . Para criar o seu próprio filtro, basta clicar com o botão direito no nó My Filters e selecionar New Filter.
  • Além disso, se você está procurando uma função com um nome específico, é possível filtrar a tabela de funções digitando parte do nome dela na caixa de filtro acima da tabela. Há suporte para o curinga *, que é útil ao lidar com nomes complexos de funções de C++.

Os processos que correspondem ao aplicativo cujo perfil está sendo traçado são isolados sob o nó My Application. Todos os outros processos que executam no sistema ao mesmo tempo que o aplicativo aparecerá sob o nó Other Processes.

É possível expandir o nó My Application para realizar drill down e examinar os processos, encadeamentos e módulos que constituem o aplicativo. O RayTracer só tem um encadeamento — portanto, só um encadeamento é mostrado neste exemplo. No caso de aplicativos multiencadeados ou com vários processos, cada encadeamento e processo pode ser examinado individualmente ou em grupo.

É possível seleciona um nó na árvore de hierarquia de processos para ver as funções amostradas nesse nível da hierarquia. Por padrão, as funções são classificadas segundo o tempo que cada função toma do perfil. As funções mais ativas ficam no topo da lista e são um bom ponto de partida para o ajuste de desempenho.

Olhando esses dados, vemos que a função sqrt toma uma porcentagem significativa do tempo de execução do aplicativo. No entanto, sqrt é uma função de biblioteca — sendo assim, não podemos alterá-la diretamente. Além disso, o nosso objetivo não é otimizar o código de biblioteca. Em vez de fazer isso, vamos tentar descobrir como sqrt é usado pelo nosso aplicativo.

Navegador Invocations

  1. Clique com o botão direito na entrada sqrt na tabela de pontos ativos da função e selecione Show callers/callees , que abrirá o navegador Invocations.
Figura 21. Navegador Invocations
Navegador Invocations

O navegador Invocations foca uma função de cada vez e mostra uma representação gráfica de todas as pilhas de chamada amostradas que incluem a função.

O navegador Invocations é muito flexível. É possível aumentar e diminuir o zoom, isolar caminhos de chamada específicos e focar partes diferentes do aplicativo. Aqui, podemos ver que a função mais ativa que chama sqrt é esta:

MyShape::sphere_find_intersection Vamos ver esta função no código.

  1. Clique com o botão direito no nó sphere_find_intersection e selecione Open Source.
Figura 22. Opção Open Source
Opção Open Source

Performance Source Viewer

O Performance Source Viewer abre no código fonte para esta função:
sphere_find_intersection

O visualizador exibe o código fonte, juntamente com os dados de desempenho no nível da linha (consulte a Figura 23). À esquerda do código, é possível ver quanto tempo de execução cada linha individual do código toma do perfil total.

Figura 23. Performance Source Code Viewer
Performance Source Code Viewer

Ao lado do Performance Source Viewer, há a visualização Outline. padrão. Quando o Performance Source Viewer é aberto, a visualização Outline mostra uma lista expandida dos blocos de código dentro de cada função no arquivo. É possível usar isso para localizar blocos de código ativos, como loops ativos.

Figura 24. A visualização da estrutura de tópicos padrão do Eclipse
A visualização da estrutura de tópicos padrão do Eclipse
  1. Voltando para o Performance Source Viewer, clique no primeiro botão da barra de ferramentas para ir para a linha de código mais ativa do arquivo.

Não é nenhuma surpresa que a linha mais ativa contém uma chamada para a função sqrt .

Figura 25. Acesse a linha mais ativa
Acesse a linha mais ativa

Parece que há a oportunidade de uma otimização simples. O valor retornado pela função sqrt não é usado na primeira ramificação da seguinte instrução if . A mudança do código para que sqrt só seja chamada na ramificação else pode ter um efeito positivo sobre o desempenho. Portanto, vamos tentar fazer essa alteração.

Não é possível editar diretamente o código no Performance Source Viewer porque os dados de desempenho no nível da linha não se alinhariam corretamente depois de uma mudança.

  1. Clique no botão da barra de ferramentas Switch to Editor .
Figura 26. O editor remoto de C/C++
O editor remoto de C/C++
  1. Altere o código para que sqrt só seja chamada na ramificação else e, em seguida, desenvolva novamente o aplicativo.

Comparando as mudanças na fonte

  1. Crie outra atividade Hotspot Detection, nomeie-a como Hotspot Detection 3 e execute-a.
  2. Quando estiver concluída, compare-a com a atividade anterior clicando com o botão direito nela e selecione Compare with Previous.
Figura 27. Selecione Compare with previous
Selecione Compare with previous

Como mostra a captura de tela na Figura 28, a mudança no código teve um impacto positivo no desempenho — agora o aplicativo está 2,353 vezes mais rápido que a execução anterior.

Figura 28. Navegador Comparison
Navegador Comparison

A tabela de impacto das funções mostra que sqrt teve um impacto significativo sobre a mudança. Entretanto, há três funções acima de sqrt que têm impactos ainda maiores. Olhando o navegador Invocations (Figura 29), vemos que todas essas funções são chamadas por sqrt; portanto, ao reduzir a quantidade de chamadas a sqrt, também reduzimos o número de chamadas a essas funções.

Figura 29. Navegador Invocations
Navegador Invocations

Agora, vamos comparar Hotspot Detection 3 com a linha de base.

Figura 30. Navegador Comparison
Navegador Comparison

O aplicativo está 4,785 vezes mais rápido como resultado das duas alterações combinadas. Nada mal!

Rastreamento automático da fonte

Podemos ir além e comparar o desempenho no nível da linha referente a sphere_find_intersection antes e depois da mudança.

  1. Abra o Performance Source Viewer em sphere_find_intersection em Hotspot Detection 2.

Olhando o visualizador, é possível ver o código original antes da mudança (juntamente com os dados de desempenho originais).

  1. Agora abra o visualizador no mesmo arquivo em Hotspot Detection 3.
  2. Acople os dois visualizadores um do lado do outro para ver os dois ao mesmo tempo.
Figura 31. Comparando o código fonte
Comparando o código fonte

A essa altura, talvez você esteja pensando: "Eu editei esse arquivo. Como eu estou vendo o código anterior à mudança?"

O Performance Advisor inclui um recurso chamado Automatic Source Tracking. Sempre que você realiza a execução de desempenho, os estados de todos os arquivos de origem do projeto são salvos como uma captura instantânea. Se você voltar para visualizar os dados de desempenho de execuções anteriores, verá exatamente como era o código naquele momento. Dessa forma, é possível visualizar comparações detalhadas dos dados de desempenho no nível da linha entre duas execuções de desempenho. Esse recurso é totalmente transparente e funciona de forma automática. Não interfere em nenhum sistema de controle de versão que possivelmente você esteja usando, como o IBM® Rational Team Concert™.

Inlining de função

  1. Vamos voltar um pouco e dar mais uma olhada na comparação entre o Hotspot Detection 1 e o Hotspot Detection 2.
Figura 32. Navegador Comparison
Navegador Comparison

Muitas das funções não têm informações de aceleração. Na verdade, indicam "Not detected in Activity Hotspot Detection 2." O que está acontecendo?

A única diferença entre as duas execuções é a ativação da otimização do compilador na segunda execução. Uma das principais otimizações realizadas pelo compilador é o inlining de função.

  1. Abra o Performance Source Viewer no arquivo RayTrace.cpp na Hotspot Detection 1.

O visualizador não mostra nada muito interessante. Há alguns dados no nível da linha, mas eles só indicam que não há linhas ativas de código neste arquivo.

Figura 33. RayTrace.cpp no Hotspot Detection
RayTrace.cpp no Hotspot Detection
  1. Agora abra o mesmo arquivo no Hotspot Detection 2.
Figura 34. RayTrace.cpp no Hotspot Detection 2
RayTrace.cpp no Hotspot Detection 2

Há muito mais informações referentes à segunda execução no visualizador. Os pequenos ícones de seta no lado esquerdo do visualizador indicam linhas de código que contêm chamadas de função que forem embutidas pelo compilador.

  1. Passe o cursor do mouse sobre uma seta para obter uma janela pop-up que mostra quais funções foram embutidas.

Quando você clica em um ícone de seta, a fonte é expandida para mostrar a fonte da função embutida embutindo-se diretamente no restante do código.

Figura 35. Explorando o inlining de função
Explorando o inlining de função

O motivo pelo qual várias das principais funções no navegador Function Comparison não foram detectadas na segunda execução é que o compilador embutiu totalmente essas funções em seus sites de chamadas. Isso teve um grande impacto positivo no desempenho do aplicativo. Pode-se explorar o resultado desse impacto com mais detalhes usando o suporte do Source Viewer para o inlining de funções.


Resumo

O Performance Advisor fornece um conjunto rico de ferramentas para ajustar o desempenho de aplicativos em C/C++ em AIX e PowerLinux. Este tutorial apresentou uma rápida visão geral dos recursos mais básicos.

Esta é uma lista de alguns dos recursos mais avançados não abordados neste artigo:

  • A visualização Recommendations está sempre disponível. São geradas recomendações para cada atividade, que são uma forma de obter orientação sobre onde procurar oportunidades de desempenho.
  • Há suporte para cenários complexos de ajuste. É possível desenvolver aplicativos e testar seu desempenho em muitos servidores AIX e PowerLinux e, em seguida, comparar os resultados.
  • Não é necessário ficar sentado na frente do computador para executar um teste de desempenho. O Performance Advisor permite programar execuções de desempenho para quando você estiver offline. Por exemplo, é possível planejar uma execução de desempenho para a noite a analisar os dados no dia seguinte.
  • O Performance Advisor vem com um conjunto de shell scripts que podem ser usados para realizar uma execução de desempenho em servidores que não têm o Rational Developer para Power Systems Software instalado ou em servidores aos quais você não tem acesso direto. Basta dar os scripts para os seus clientes executarem e, em seguida, importar os dados resultantes para análise.
  • Os dados de desempenho podem ser compartilhados entre os membros da equipe por meio dos recursos de importação e exportação.

Download

DescriçãoNomeTamanho
Sample applicationRayTracer.zip137KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Rational
ArticleID=825026
ArticleTitle=Ajuste de Desempenho de Aplicativos C/C++ com o Performance Advisor no Rational Developer para Power
publish-date=07162012