Modulo II Ferramentas para otimização Agenda Compilador Microsoft® Compilador Intel® Intel® VTune™ Ferramentas Compilador Microsoft® Compilador Microsoft® Microsoft EVC 3.0 IDE IDE padrão para PocketPC/Smartphone 2002 SDK Vem com compilador 3.0 Suporte apenas para ARM genérico Microsoft EVC 4.2 IDE [Para PocketPC/Smartphone 2003] Possui SDK para PocketPC 2003 e Smartphone 2003 Não possui SDK para PocketPC/Smartphone 2002 Suporte interno para extensões DSP e co-processador iMPT Suporta programação para Intel® XScale™ Não suporta rotinas intrinsecas WMMX nem outras extensões WMMX Compilador ECV 4.2 pode ser instalado na IDE 3.0 Compilador para microprocessador Intel® XScale™ pode ser instalado no ambiente EVC 3.0 Suporte interno no compilador eVC 4.2 Função interna Instrução Assembly XScale™ Descrição void _SmulAdd_SL_ACC( MIA (<cond>) acc0, Rm, Rs MIA multiplica o valor no registrador Rs pelo valor no Registrador Rm e soma o resultado ao acumulador de 40 bits MIAPH (<cond>) acc0, Rm, Rs A instrução MIAPH faz duas multiplicações de 4 inteiros de 16 bits dois a dois e soma os resultados ao acumulador de 40 bits MIABB (<cond>) acc0, Rm, Rs Faz uma multiplicação de 16 bits utilizando as metades menos significativas de Rm e Rs e soma ao acumulador de 40 bits MIATT (<cond>) acc0, Rm, Rs Faz uma multiplicação de 16 bits utilizando as metades mais significativas de Rm e Rs e soma ao acumulador de 40 bits MIABT (<cond>) acc0, Rm, Rs Faz uma multiplicação de 16 bits usando a metade menos significativa de Rm e a metade mais significativa de Rs e soma ao acumulador de 40 bits int Arg1, int Arg2 ); void _SmulAddPack_2SW_ACC( int Arg1, int Arg2 ); void _SmulAddLo_SW_ACC( int Arg1, int Arg2 ); void _SmulAddHi_SW_ACC( int Arg1, int Arg2 ); void _SmulAddLoHi_SW_ACC( int Arg1, int Arg2); Suporte interno no compilador EVC 4.2 Função interna Instrução Assembly XScale™ Descrição void _SmulAddHiLo_SW_ACC( MIATB (<cond>) acc0, Rm, Rs Faz uma multiplicação de 16bits usando a metade menos significativa de Rm e a metade mais significativa de Rs e soma ao acumulador de 40 bits MAR (<cond>) acc0, Rm, Rs Move os 40 bits menos significativos de Arg1 ao acumulador de 40 bits, Arg2 é o número de co-processador, deve ser 0 MRA (<cond>) acc0, Rm, Rs Retorna o valor do co-processador. O Arg1 é o número do co-processador, deve ser 0 PLD (<cond>) acc0, Rm, Rs Essa instrução é utilizada para carregar previamente dados na memória Cache int Arg1, int Arg2 ); void _WriteCoProcessor( __int64 Arg1, int Arg2 ); __int64 _ReadCoProcessor( int Arg1 ); void _PreLoad( unsigned long *addr ); Instalando o Compilador 4.0 no IDE EVC 3.0 • • Instale IDE Microsoft EVC 3.0 Instale IDE Microsoft EVC 4.2 – Note o diretório de instalação, ele é diferente do IDE 3.0 • • • • • • Inicie o IDE EVC 3.0, escolha Tools -> Options na barra de menus Escolha a aba Directories Na List Box “Show Directories”, escolha “Include Files” Dê um duplo clique no espaço em branco com a caixa vermelha Clique no botão “...” Ache o diretório com os arquivos de include do compilador 4.2, aperte OK Desenvolvendo para sistemas PocketPC/Smartphone 2002 Instalando o Compilador 4.0 no IDE EVC 3.0 • Selecione o novo diretório adicionado e com a seta para cima carregue este diretório até o topo da lista – Isto fará com que ele seja procurado primeiro Instalando o Compilador 4.0 no IDE EVC 3.0 Vá até o diretório: C:\Arquivos de Programas\Microsoft Embeeded Tools\EVC\wce300 Copie o diretório bin Renomeie o diretório copiado para obin Localize o diretório bin do compilador 4.2 Selecione todos os arquivos bin para serem copiados Copie-os sobre os arquivos do diretório wce300\bin Se você precisar voltar à versão antiga Renomeie o diretório bin para nbin Renomeie o diretório obin para bin Remova a referência do diretório 4.2 do Include File Ajustando opções específicas para o microprocessador Intel® XScale™ no compilador 4.0 Vá até Project -> Settings Certifique-se de que o módulo selecionado é o módulo do projeto As opções do compilador são: /QRxscale – o processador é o Intel® XScale™ /QRxscalesched – usa características do pipeline do Intel® XScale™ /QRdsp – usa extensões DSP da ARM Qual compilador Microsoft está sendo usado? Vá até Project-> Settings na barra de menu Clique na aba C/C++ Na List Box “Category” escolha “Customize” Desmarque “Supress startup banner” Durante a compilação você verá o texto do compilador Para VCC++ 3.0, a versão é 12.01.8569 Para VCC++ 4.0, a versão é 12.20.9615 Ferramentas Compilador Intel® Compilador Intel Integrado ao IDE Microsoft eVC Suporte a Intrínsecas Inclui vector analysis (com a chave /QTPxsc3) Geralmente produz melhor compilação de todo o código (ganho de 8 a 10%) Possui bibliotecas superiores – para programas de algoritmo intensivo, especialmente ponto flutuante, o ganho pode facilmente ser de 2x Usar o Compilador Intel e as Intrínsecas Wireless MMX é uma maneira fácil de incorporar desempenho Wireless MMX em uma aplicação Opções do Compilador Intel® XScale™ • Use /O3 – Digite manualmente na caixa “Additional Options” – Em alguns casos raros, a otimização é tão agressiva que a execução do programa falha – troque por /O2 • A opção /O2 é encontrada em File->Settings, aba C++ • Selecione o pushbutton /Qipo – Faz otimizações interprocedurais – Pode causar algum aumento no tamanho do código Usando o compilador Intel® Depois da instalação, 3 novos itens aparecerão no menu “Tools” “Compiler Options” habilita a seleção de chaves adicionais de otimização que não fazem parte do conjunto Microsoft Habilita/Desabilita o compilador Intel® Fornece documentação sobre as opções e outras características do compilador Ferramentas Comparações entre os Compiladores Dados de Aplicações sem WMMX Aplicação Gargalo MS 3.0 MS 4.0 Intel 1.1 Prime Memória 7.9909 7.2283 7.3918 Mortgage Calculator Aritmética de ponto flutuante 11.5017 11.5008 2.8332 GapiDraw Escrita a memória 1.6394 1.5969 1.507 Digital Persona Uso intensivo da CPU .8857 .7493 .6799 Speechworks Uso intensivo da CPU sem dados 3.1244 2.80245 • O dado é o tempo em segundos • A biblioteca de ponto flutuante faz grande diferença Ferramentas Intel® VTune™ Ferramenta de Análise de Desempenho VTune™ – Ferramenta de Análise Estatística de Desempenho para Intel® XScale™ • Recolhe amostras em intervalos regulares de tempo, determinando qual função consome mais recursos da CPU (baseado no tempo) • Determinando qual função causa a utilização mais ineficiente do processador (baseado em eventos) • Usa a PMU encontrada apenas nos processadores Intel ® VTune™ – Outros benefícios Mede desempenho sem instrumentação Apenas depura símbolos necessários Mostra no código fonte quais são os “HotSpots” existentes na função Dá conselhos de ajuste de desempenho VTune™ - Performance Tuning Advice O que é amostragem estatística? Amostragem significa que a informação é obtida sobre o processo, a thread e o módulo atual com a localização no módulo quando o evento ocorre Eventos ocorrem em algum intervalo Baseado em um intervalo de tempo Baseado no número de eventos de uso ou travamento de recursos Supõe-se que a cada intervalo o código em execução é o mesmo, ou seja, não mudou desde o último evento VTune™ - Hot Spot View Exibe quais funções usam mais a CPU. Note a escala e a diferença entre o timer e o timer event VTune – Análise de eventos O VTune habilita a captura de dados estatísticos de eventos Eventos são capturados pela PMU, tipicamente representam travamento de recursos, por exemplo: Travamento por dependência de dados Perda de cache de instruções Perda de cache de dados Buffer de dados não disponível VTune – Análise de eventos Depois de um número de eventos pré-definidos, uma amostra é obtida Determinada pela calibração, NÃO PULE ESTE PASSO! Falha na escolha da calibração apropriada resulta em interferência entre ISR e a aplicação Até 2 eventos podem ser capturados em conjunto com amostras baseadas em tempo. No PXA27x (Bulverde) até 4 eventos. Eventos PMU para Intel® XScale™ Número Definição Número 0x0 Fracasso na cache de instruções 0x7 Instrução executada 0x1 Cache de instruções não pode entregar a instrução 0x8 Travamento devido a lotação da D-Cache 0x2 Travamento por dependência de dados 0x9 Sequência contígua do evento 0x8 0x3 Fracasso em instrução TLB 0xa Acesso a Data cache 0x4 Fracasso em dado TLB 0xb Fracasso na Data cache 0x5 Desvio de instrução executado 0xc Data cache write-back 0x6 Fracasso em predição de desvio 0xd Software mudou PC Definição Hotspots baseados em tempo e eventos Tempos e eventos são apresentados no mesmo gráfico. A escala em cada é completamente diferente Preparando seu código para uma execução do VTune™ Em Project->Settings Tenha certeza que projeto (topo) está selecionado Pressione a guia C++ Na caixa Debug Info, selecione Program Database Preparando seu código para uma execução do VTune™ Vá para a guia Link Tenha certeza que a caixa Generate debug info está marcada VTune ™ - Como o Data Collector trabalha O Data Collector é utilizado para ajustar intervalos de amostra na PMU Executa-se a aplicação, as interrupções são direcionadas pela PMU para colher dados ISR coleta um histórico de amostras, informações sobre qual módulo, qual processo, qual linha de execução (thread) Data Collector Arquivos da Saída: Aplicação em teste com informações de Debug Arquivo de amostra (.rsf) – Dados de amostra das interrupções da PMU Informações ISR Arquivo de módulo (.rmf) – Lista dos módulos e localizações Requer uma construção especial de uma imagem ROM para plataformas baseadas em WinCE Depois de coletar os dados Use o ActiveSync para copiar os arquivos.rsf e .rmf para o Host Use um diretório próximo à raiz com nome simples, exemplo: c:\vtune Converta usando buildtbxxsc Será necessário os utilitários de conversão no mesmo diretório da conversão Associe o arquivo.tb5 com o VTune C:\Arquivos de programas\Intel\VTune\Shared\Bin\VtuneEnv.exe Depois de coletar os dados Os utilitários de conversão: Tbsutil.dll Convert5.exe Builtbxxsc.exe Copie estes arquivos de C:\Arquivos de programas\Intel\VTune\RDC for XSC2\Host para o seu diretório de conversão Abrindo o arquivo no VTune Você terá de responder isto o tempo todo Marque “Do not import, just view the file” e pressione OK Associação com arquivo binário Quando você entrar nos Hotspots, você será perguntado para associar com o arquivo binário O VTune usa isto para encontrar a localização das funções junto do módulo Procure o diretório do seu projeto, então entre no diretório ARMV4Dbg ou ARMV4Rel Selecione o binário do seu projeto Entendendo os modos de visão do VTune™ O VTune habilita a observação de dados coletados por Process, Thread, Módulo ou HotSpot No modo Process (processos), o VTune apresentará as amostras de todos o processos do dispositivo No modo Thread (linhas de execução), ele apresentará todas as threads dependentes do processo escolhido No modo Module (módulo), ele apresentará todas as amostras de cada módulo que estavam em execução. Um módulo é um código executável carregado em um local. Quando seu programa chama uma DLL, ele continua no mesmo processo e thread, mas em um módulo diferente No modo HotSpot é apresentado como todas as amostras estão distribuídas por função para o módulo selecionado Dicas do VTune™ Associe o arquivo .tb5 com o VTune Isso torna mais fácil a abertura do arquivo Você pode ordenar os dados por ascendência ou descendência O VTune permite que você organize os dados em uma planilha, útil para captar dados para análises futuras Você não pode salvar as informações, mas você pode recortar e colar em uma outra planilha Dicas do VTune™ Considere o uso de “Print Screen” para captar marcas significativas Cole no PowerPoint Antes da otimização Depois da otimização Certifique-se em qual modo de visão você está Processos - Thread - Módulo Seja cuidadoso sobre o que foi medido, quando o VTune executa a aplicação a medida funciona melhor Executando a aplicação manualmente, ou executando uma aplicação que requer interação do usuário com o VTune, gera uma variação nos resultados, aparece VTIdle (VTune fica ocioso) Dicas do VTune™ - Seja cuidadoso na forma de interpretar os dados Gráficos de barras no módulo Process possuem abscissa com unidades em 100, que não são unidades de medida, nem são porcentagem! As porcentagens das funções são as porcentagem do módulo, não do processo, e não de tudo; desse modo todas as porcentagens de tempo das funções em um módulo somam 100 Os eventos estão em número de interrupções, é preciso multiplicar esse número pelo número de eventos acontecidos por interrupção Diferentes eventos são desenhados em escalas completamente diferentes no mesmo gráfico Os clocks estão em ticks ou em milissegundos, isso pode ser confuso Dicas do VTune™ - Ligação incorreta ou quebrada de símbolos Seja cuidadoso em recompilações Separe os diretórios de resultados do VTune para diferentes experimentos, também separe os diretórios de projetos O VTune utiliza informações do Arquivo executável (.exe) Diretório do projeto Copie o arquivo .exe do PDA em um diretório separado, aponte o Vtune para aquele arquivo .exe Seja cuidadoso ao sobrescrever os arquivos .rsf, .rmf, .tb5, apague os arquivos .sdb (arquivos de símbolo), force o VTune a recriar as informações de símbolos Dicas do VTune™ - Interrupções imprecisas Sempre tenha em mente como o VTune obtém o dados É possível que uma função gere 99% dos eventos, mas após a próxima função ser chamada a interrupção ocorre, ela será responsabilizada por todos os eventos. Ao longo de todo o processo de medida isso não é um problema a não ser que haja coincidência específica entre a amostragem e as chamadas das funções A natureza imprecisa do VTune faz o ponto exato no fonte ser incerto Considerando as incertezas nas informações obtidas Contínua útil para aproximações VTune™ - Imagens com Suporte Requer PMU encontrada em XScale™ Não trabalha em SA1110 Requer modificação no Windows CE para a BSP A imagem ROM deve ser construída para suportar PMU Para Windows CE Placa Lubbock, intrínseco Recarga especial no PocketPC somente no IPAQ 3950 Viewsonic PC V35 (PPC 2002) Todos PPC 2003 e SmartPhones 2003 Axim X3 PPC 2003 Mitac 8390 SmartPhome 2003 Módulo II Laboratório Objetivos: - Instalar o compilador Microsoft 4.2 na IDE do eVC++ 3.0 - Usar o Compilador Intel C++ for Intel XScale Processor - Obter métricas iniciais de performance