Post on 21-Apr-2015
Ferramentas para otimização
Modulo II
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.2Função interna Instrução Assembly XScale™ Descrição
void _SmulAdd_SL_ACC(
int Arg1,
int Arg2 );
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
void _SmulAddPack_2SW_ACC(
int Arg1,
int Arg2 );
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
void _SmulAddLo_SW_ACC(
int Arg1,
int Arg2 );
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
void _SmulAddHi_SW_ACC(
int Arg1,
int Arg2 );
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
void _SmulAddLoHi_SW_ACC(
int Arg1,
int Arg2);
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
Suporte interno no compilador EVC 4.2
Função interna Instrução Assembly XScale™ Descrição
void _SmulAddHiLo_SW_ACC(
int Arg1,
int Arg2 );
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
void _WriteCoProcessor(
__int64 Arg1,
int Arg2 );
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
__int64 _ReadCoProcessor(
int Arg1 );
MRA (<cond>) acc0, Rm, Rs Retorna o valor do co-processador. O Arg1 é o número do co-processador, deve ser 0
void _PreLoad(
unsigned long *addr );
PLD (<cond>) acc0, Rm, Rs Essa instrução é utilizada para carregar previamente dados na memória Cache
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 inter-
procedurais– 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
• O dado é o tempo em segundos• A biblioteca de ponto flutuante faz grande diferença
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
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
Definição
0x0 Fracasso na cache de instruções 0x7 Instrução executada
0x1Cache de instruções não pode entregar a instrução 0x8
Travamento devido a lotação da D-Cache
0x2Travamento 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
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
Vá para a guia Link Tenha certeza que a
caixa Generate debug info está marcada
Preparando seu código para uma execução do VTune™
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)
Requer uma construção especial de uma imagem ROM para plataformas baseadas em WinCE
Data Collector
Aplicação em teste com
informações de Debug
Informações ISR
Arquivos da Saída:
Arquivo de amostra (.rsf) – Dados de amostra das interrupções da PMU
Arquivo de módulo (.rmf) – Lista dos módulos e localizações
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: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