Desempenho
Definição Medidas de desempenho utilizadas Tempo de resposta ou tempo de execução: tempo decorrido entre o início da execução de um programa e o seu final Quantidade de trabalho realizada em um determinado intervalo de tempo (throughput) Enfoque será dado em tempo de execução
Medida de desempenho Para maximizar desempenho, devemos minimizar tempo de execução de uma tarefa Para uma máquina X, teremos Desempenho X =1/tempo de execução em X Comparação de desempenhos Desempenho X > Desempenho Y, então Tempo de execução em Y > Tempo de execução em X
Exemplo Uma máquina A executa um programa em 10s e uma máquina B executa o mesmo programa em 15s. Qual é mais rápida? Desempenho A /Desempenho B =Tempo de execução em B/ Tempo de execução em A=15/10=1,5 Dizemos que A é 1,5 vezes mais rápida que B
Medindo desempenho Tempo utilizado como tempo de execução do programa é conhecido como wall-clock time, response time, ou elapsed time Inclui tempo total de execução da tarefa no sistema CPU acesso a disco acesso a memória atividades de E/S overhead de sistema operacional
Medindo desempenho Em sistemas timeshared, o sistema pode tentar maximizar o throughput e não minimizar o elapsed time, então utiliza-se uma medida para saber o tempo de CPU que foi utilizado pelo programa Tempo de execução da CPU (CPU time) tempo que a CPU gastou para realizar um determinado programa não inclui tempo de espera pela CPU por entrada e saída ou gasto pela CPU para executar outros programas CPU time = User time + system CPU time
Medindo desempenho Através do comando time, obtêm-se os seguintes dados: 90.7u 12.9s 2:39 65% Elapsed time= 159s, User time=90,7s, System time=12,9s Porcentagem da CPU utilizada pelo programa (90,7+12,9)/159=65% 35% gasto para espera por E/S ou por outros programas
Outras métricas de desempenho Projetistas de hardware gostariam de utilizar uma medida que mostrasse a rapidez que um hardware pode executar funções básicas Computadores possuem um relógio que possui uma freqüência de operação e determina o momento em que eventos são realizados na máquina Os intervalos de tempo discretos do relógio são denominados ciclos de relógio Período do relógio = 5 ns, Freqüência=200MHZ
Relacionando as métricas Tempo de execução de um programa = Número de ciclos de relógio utilizados pela CPU para o programa Tempo de cada ciclo do relógio Tempo de execução de um programa = Número de ciclos de relógio utilizados pela CPU para o programa / Freqüência do relógio Para aumentar o desempenho de uma máquina se pode reduzir o tempo do ciclo do relógio ou o número de ciclos
Relacionando as métricas - Exemplo Um programa gasta 20s para ser executado em uma máquina A, cujo relógio é de 1GHZ. Queremos construir uma máquina B que execute este mesmo programa em 12s. Sabe-se que a freqüência do relógio pode ser aumentada, mas esse aumento implica em mudanças no projeto, fazendo com que a máquina B necessite 1,2 vezes mais ciclos de relógio que a máquina A para executar o programa. Qual deve ser a freqüência a ser utilizada na máquina B?
Relacionando as métricas - Exemplo Número de ciclos requerido pelo programa executando-o em A Tempo de CPU A =Número de ciclos de CPU A /Freq. do relógio A Número de ciclos da CPU A =20 10 9 Relógio da máquina B Tempo de CPU B =Número de ciclos de CPU B /Freq. do relógio B Número de ciclos de CPU B =1,2 Número de ciclos de CPU A Freq. do relógio B = 1,2 Número de ciclos de CPU A / Tempo de CPU B =2GHZ
Relacionando hardware e software Tempo de execução de um programa pode ser visto como o produto do número de instruções necessárias para executá-lo pelo tempo médio de execução de uma instrução Instruções podem ter número de ciclos de relógio variáveis CPI (clock cycles per instruction): média do número de ciclos por instrução Número de ciclos de relógio de um programa é igual ao produto do número de instruções pelo número médio de ciclos de relógio gasto por cada instrução
Exemplo de desempenho Suponha que existam duas implementações para o mesmo conjunto de instruções. A máquina A possui um relógio de freqüência 1GHZ e uma CPI de 2,4 para um determinado programa com I instruções e a máquina B possui um relógio de freqüência 500 MHZ e CPI de 1,0 para o mesmo programa. Qual máquina executa mais rapidamente? Tempo de CPU A =Número de ciclos A Tempo do ciclo em A= I 2,4 (1/10 9 )=2,4 I ns
Exemplo de desempenho Tempo de CPU B =Número de ciclos B Tempo do ciclo em B= I 1,0 (1/500 10 6 )=2,0 I ns Desempenho B /Desempenho A =Tempo de execução em A/Tempo de execução em B= 2,4 I ns/ 2,0 I ns=1,2 Máquina B é 1,2 vezes mais rápida que a máquina A
Equação de desempenho de um programa Tempo de CPU=(Número de instruções CPI) / Freqüência do relógio Tempo de CPU obtém-se executando o programa Freqüência é dada pelo fabricante Número de instruções pode ser obtido por ferramentas de software ou simulador da arquitetura CPI depende do projeto da máquina e das instruções utilizadas pelo programa
MIPS MIPS: Million Instructions Per Second Para um dado programa, MIPS=Número de instruções / (Tempo de execução 10 6 ) Máquinas mais rápidas possuem MIPS maiores Problemas Máquinas com conjuntos de instruções diferentes não podem ser comparadas porque o número de instruções vai diferir entre elas Não se pode considerar uma medida única, pois cada programa executado apresenta uma medida diferente Pode variar inversamente ao desempenho
Exemplo de problema com MIPS Considere uma máquina com freqüência de relógio de 250MHZ que possui três classes de instruções A, B e C com as seguintes medidas de CPI: Classe A=1, Classe B=2 e Classe C=3. Suponha que para um mesmo programa obtivemos código utilizando dois compiladores diferentes, resultando em: Número de instruções (em bilhões) Código do A B C Compilador 1 5 1 1 Compilador 2 10 1 1 Qual executará mais rápido de acordo com a métrica MIPS e com o tempo de execução?
Exemplo de problema com MIPS Tempo de execução=número de ciclos/freqüência Número de ciclos=cpi A número A + CPI B número B + CPI C número C Número de ciclos para compilador 1=10 10 9 Número de ciclos para compilador 2=15 10 9 Tempo de execução para compilador 1= 40s Tempo de execução para compilador 2= 60s Compilador 1 mais rápido que 2
Exemplo de problema com MIPS MIPS=Número de instruções/(tempo de execução 10 6) Número de instruções para compilador 1=7 10 9 Número de instruções para compilador 2=12 10 9 MIPS para compilador 1=7 10 9 / (40 10 6 )= 175 MIPS para compilador 2=12 10 9 / (60 10 6 )= 200 Compilador 2 produz código com maior MIPS mas maior tempo de execução
MFLOPS MFLOPS: Million FLoating-point Operations Per Second Para um dado programa, MFLOPS=Número de operações em ponto flutuante/ (Tempo de execução 10 6 ) Operações de ponto flutuante consistem de operações de adição, subtração, multiplicação ou divisão aplicadas a números representados em ponto flutuante
MFLOPS Programas diferentes requerem números diferentes de operações em ponto flutuante medida aplicada para programas que utilizam intensamente estas operações MFLOPS seria uma medida mais justa para comparar desempenho do que MIPS, partindo-se do pressuposto que máquinas diferentes executam números de instruções diferentes, mas igual número de operações em ponto flutuante Na realidade, o conjunto de operações em ponto flutuante varia de máquina para máquina
MFLOPS Operações em ponto flutuante possuem tempos de execução variáveis Um programa que possui 100% de somas em ponto flutuante é executado mais rápido que um outro que possua 100% de divisões, acarretando a dependência da medida MFLOPS ao programa
Como avaliar e comparar desempenho? Executar programas e verificar tempo de execução Programas utilizados freqüentemente pelo usuário Programas desenvolvidos especialmente para medir desempenho (benchmark) Programas devem ser aplicações típicas do ambiente em que a máquina irá ser utilizada Otimização de compiladores direcionados aos programas de benchmark Programas de benchmark devem ser grandes
SPEC benchmark System Performance Evaluation Cooperative Possui vários programas para benchmark em várias áreas: CPU, gráficos, paralelismo SPEC CPU 2000 programas CPU intensivos para dar ênfase no desempenho da CPU, arquitetura de memória e compilador 12 programas com inteiros (C e C++) e 14 com ponto flutuante (Fortran) Problemas reais compilador C, jogo de xadrez, banco de dados orientado a objetos, problemas de otimização, análise de fluidos, teste de números primos, modelo de acelerador de partículas
SPEC benchmark Para uma arquitetura com um determinado conjunto de instruções, o desempenho da máquina pode ser aumentado de três maneiras: aumento da freqüência do relógio melhorias na organização do processador de modo que CPI se torne menor melhoramentos do compilador que gera menor número de instruções ou gera instruções com CPI médio menor
SPEC benchmark SPECint 500 400 300 200 100 0 Pentium III Esperado 0 500 1000 1500 Freqüência
SPECfp 400 300 200 100 0 0 500 1000 1500 Freqüência Pentium III Esperado
SPEC benchmark SPECfp 400 300 200 100 0 0 500 1000 1500 Freqüência Pentium III Pentium III Pro