Definindo desempenho • Vazão e tempo de resposta Organização e Arquitetura de computadores Avaliando e compreendendo o desempenho Prof. Dr. Luciano José Senger – Tempo de resposta: também chamado de tempo de execução, o tempo total necessário para o computador completar uma tarefa, como a acesso a disco, acesso à memória, atividade de E/S, overhead do sistema operacional, tempo de execução da UCP, etc. – Vazão (throughput), indica a quantidade de tarefas terminadas por unidade de tempo – Exemplos: • Disco de 50 MBytes/s • Memória de 20 nanosegundos • Processador de 500 MFLOPS • Rede de 100 MBits/s Definindo desempenho Definindo desempenho • Desempenho • Desempenho relativo – Para maximizar o desempenho, devemos minimizar o tempo de resposta: • Desempenho(x) = 1 / Tempo de execuçao(x) – Em dois computadores X e Y, se o desempenho de X é maior que o desempenho de Y temos: Desempenho(x) > Desempenho(Y) 1 / Tempo de execução(x) > 1 / Tempo de execução(y) Tempo de execução(y) > Tempo de execução (x) – Na análise do projeto de um computador, normalmente queremos relacionar o desempenho de dois computadores diferentes de maneira quantitativa: • Desempenho(x)/Desempenho(y) = n • Desempenho(x)/Desempenho(y) = TE(y)/TE(x) = n • n indica a quantidade de vezes que o desempenho de x é maior que o de y – Se um computador A executa um programa em 10 segundos e o computador B executa o mesmo programa em 15 segundos, o quanto A é melhor que B ? – N = TE(B)/TE(A) = 15/10 = 1,5 • Medindo o desempenho – O tempo é a medida de desempenho dos computadores: o computador que a realiza a mesma quantidade de trabalho no menor tempo é mais rápido – Tempo pode ser definido de diferentes maneiras: tempo de relógio, tempo de resposta ou tempo corrido são as definições mais simples – Sistema de tempo compartilhado pode alterar os valores observados: as vezes é necessário distinguir entre o tempo corrido e o tempo que o processador foi realmente utilizado pelo programa Medindo o desempenho Entendendo o desempenho dos programas • Tempo de execução na UCP ou tempo de UCP • Diferentes aplicações – Reconhece a distinção entre o tempo gasto para executar o programa em termos de utilização de UCP – O tempo de CPU pode ser dividido entre o tempo que é gasto pelo programa e o tempo que é gasto pelo sistema – O tempo gasto pelo sistema envolve o tempo gasto com • Sobrecarga do sistema operacional • Operações de E/S – Sob o ponto de vista do sistema, tem-se o ciclo de clock e o período de clock • Todos os computadores são construídos com um relógio (temporizador) que trabalha em uma velocidade constante e determina quando os eventos ocorrem no hardware: ciclos de clock • Período de clock refere-se ao tempo de cada ciclo de clock (p.e. 0,25 nanosegundo) • Velocidade de clock refere-se ao inverso do período de clock, ou frequência do processador (p.e. 4GHz) – São sensíveis a diferentes aspectos do desempenho de um sistema computacional – Aplicações executadas em servidores dependem de desempenho de E/S; aplicações numéricas dependem de um bom desempenho da UCP – Assim, é importante definir a medida de desempenho apropriada – Exemplos: • Suponha que queremos saber se uma aplicação que usa o desktop de um cliente e um servidor remoto está limitada pelo desempenho da rede. Para as mudanças a seguir, diga se apenas a vazão melhora, se o tempo de resposta e a vazão melhoram ou se nenhum dos dois melhoram: – Um canal extra de rede é acrescentado entre o cliente e o servidor, aumentando a vazão total da rede e reduzindo o atraso para obter acesso à mesma; – O software de rede é melhorado, reduzindo assim o atraso da comunicação via rede, mas não melhorando a vazão de rede; – Mais memória é acrescentada ao computador. • O desempenho do computador C é 4 vezes melhor que o desempenho do computador B, que executa uma aplicação em 28 segundos. Quando tempo o computador C levará para executar essa aplicação? Desempenho da UCP e seus fatores • Medidas de desempenho – Tucp = Ciclos x TCiclo – Tucp = Ciclos/Velocidade de clock • Tempo de execução da UCP para um programa (Tucp) • Ciclos de clock da UCP para um programa (Ciclos) • Tempo de ciclo de clock (TCiclo) Desempenho da UCP e seus fatores • Tempo de clock (MHz, GHz) é o inverso do ciclo de clock (clock period) CC = 1 / CR one clock period 10 nsec clock cycle => 100 MHz clock rate – Essa fórmula deixa claro que o projetista pode melhorar o desempenho reduzindo a duração do ciclo de clock ou o número de ciclos de clock necessários para um programa – Projetista deve achar um equilíbrio entre os dois aspectos 5 nsec clock cycle => 200 MHz clock rate 2 nsec clock cycle => 500 MHz clock rate 1 nsec clock cycle => 1 GHz clock rate 500 psec clock cycle => 2 GHz clock rate 250 psec clock cycle => 4 GHz clock rate 200 psec clock cycle => 5 GHz clock rate Desempenho da UCP e seus fatores Desempenho da UCP e seus fatores • Melhorando o desempenho • Melhorando o desempenho – Nosso programa favorito é executado em 10 segundos no computador A, que tem um ciclo de clock de 4 GHz. Estamos tentando ajudar o projetista do computador B que execute esse programa em 6 segundos. O projetista determinou que um aumento substancial na velocidade de clock é possível, mas esse aumento afetará o restante do projeto de UCP, fazendo com que o computador B exija 1,2 vez mais ciclos de clock do que o computador A para esse programa. Que velocidade de clock devemos dizer para o projetista buscar? – Qual é a quantidade de ciclos de clock necessários para o programa A? • TempoUCPA = CiclosdeClockA/VelocidadeClockA • 10 segundos = CiclosdeClock/(4 x 10^9 ciclos/segundo) • CiclosdeClock = 40 x 10^9 – O tempo de UCP para B pode ser encontrado usando a seguinte equação: • TempoUCPB = 1,2 x ciclosdeClockA / velocidadeClockB • 6 segundos = (1,2 x 40 x 10^9 ciclos) / velocidadeClockB • VelocidadeClockB = (1,2 x 40 x 10^9) / 6 • VelocidadeClockB = 8GHz – Portanto, a velocidade de clock do computador B deve ser o dobro da velocidade de clock do computador A para poder executar o programa em 6 segundos Desempenho da UCP e seus fatores Desempenho da UCP e seus fatores • Interface hardware/software • Usando a equação do desempenho – As equações anteriores não fazem referência ao número de instruções necessárias para o programa; entretanto, o compilador claramente gerou instruções para rodar o programa, o tempo de execução tem de depender do número de instruções em um programa • CiclosdeClockUCP= Intruções x médiadosCiclosdeClockporInstrução – O termo ciclos de clock por instrução, que é o número médio de ciclos de clock que cada instrução gasta para ser executada, é abreviado como CPI – Como diferentes instruções podem gastar diferentes quantidades de tempo dependendo do que elas fazem, o CPI é uma média de todas as instruções executadas no programa – O CPI fornece uma maneira de comparar duas implementações diferentes do mesmo conjunto de instruções, já que a contagem de instruções necessária para um programa será a mesma – Para um mesmo conjunto de instruções, o computador A tem um tempo de ciclo de clock de 250ps e um CPI de 2,0 para um determinado programa, e o computador B tem um tempo de ciclo de clock de 500ps e um CPI de 1,2 para o mesmo programa. Que computador é mais rápido para esse programa e o quanto mais rápido? – Sabe-se que cada computador executa o mesmo número de instruções para o programa; vamos chamar esse número de I: • CiclosClockCPUA = I x 2,0 • CiclosClockCPUB = I x 1,2 – Pode-se calcular o tempo de UCP para cada computador: • • • • TempoCPUA = CiclosClockCPUA x TempoCicloClockA TempoCPUA = I x 2,0 x 250ps = 500 x Ips TempoCPUB = I x 1,2 x 500ps = 600 x Ips 600/500 = 1,2, assim o computador A é 1,2 vez mais rápido Desempenho da UCP e seus fatores Desempenho da UCP e seus fatores • O cálculo do CPI efetivo é feito observando os diferentes tipos de instruções e suas quantidades de ciclos: • Usando equações de desempenho – TempoCPU = ContagemdeInstruções x CPI x TempoCicloClock – TempoCPU = (ContagemdeInstruções x CPI )/ velocidadeClock n Ciclos de clock da UCP = Freq CPIi (CPIi x Ci) – Ci é a quantidade das instruções da classe i que é executada – CPIi é o número médio de ciclos de clock por instrução para a classe de instruções corrente – n é o número de classes de instruções Um exemplo simples Op Σ i=1 Avaliando o desempenho Freq x CPIi • Workload e benchmarks ALU 50% 1 .5 .5 .5 .25 Load 20% 5 1.0 .4 1.0 1.0 Store 10% 3 .3 .3 .3 .3 Branch 20% 2 .4 .4 .2 .4 2.2 1.6 2.0 1.95 Σ= • O quanto será mais rápida uma máquina se um esquema melhorado de cache reduzir o tempo de load para 2 ciclos? Novo tempo CPU = 1.6 x IC x CC então 2.2/1.6 significa 37.5% mais rápido • Como comparar com um novo esquema que reduz pela metade o tempo de branch ? Novo tempo CPU = 2.0 x IC x CC então 2.2/2.0 significa 10% mais rápido – Workload: Conjunto de programas frequentemente executados pelo usuário – Benchmarks: programas específicos para medir o desempenho – formam um workload – O melhor tipo de programa para benchmark são aplicações reais – Experimentos com benchmarks devem seguir o conceito de reprodutibilidade • E se duas instruções da ALU pudessem ser executadas ao mesmo tempo? Novo tempo CPU = 1.95 x IC x CC então 2.2/1.95 significa 12.8% mais rápido Avaliando o desempenho (SPEC) Integer benchmarks Entendendo o desempenho dos programas FP benchmarks Quantidade de instruções CPI Algoritmo X X Linguagem de programação X X Compilador X X X X X X X gzip compression wupwise Quantum chromodynamics vpr FPGA place & route swim Shallow water model gcc GNU C compiler mgrid Multigrid solver in 3D fields mcf Combinatorial optimization applu Parabolic/elliptic pde crafty Chess program mesa 3D graphics library parser Word processing program galgel Computational fluid dynamics eon Computer visualization art Image recognition (NN) perlbmk perl application equake Seismic wave propagation simulation gap Group theory interpreter facerec Facial image recognition vortex Object oriented database ammp Computational chemistry bzip2 compression lucas Primality testing twolf Circuit place & route fma3d Crash simulation fem sixtrack Nuclear physics accel ISA (conjunto de instruções) Organização do processador apsi Pollutant distribution Tecnologia Tempo de clock X Avaliando o desempenho (Pentium) Avaliando o desempenho Avaliando o desempenho (consumo de energia) Avaliando o desempenho • Falácias e armadilhas – Armadilha: usar um subconjunto da equação de desempenho como uma medida de desempenho – Além de usar apenas o ciclo de CPU para medir o desempenho dos computadores, qualquer subconjunto de medidas de desempenho pode inferir em medidas imprecisas de desempenho – Exemplo: medida MIPS Avaliando o desempenho • Falácias e armadilhas – Armadilha: esperar a melhoria de um aspecto de um computador para aumentar o desempenho por uma quantidade proporcional ao tamanho da melhoria • Suponha um programa executado em 100 segundos em um computador, com operações de multiplicação responsáveis por 80 segundos desse tempo. Em quanto preciso melhorar a velocidade da multiplicação se desejo que meu programa rode cinco vezes mais rápido? Avaliando o desempenho Leituras Recomendadas • Lei de Adamhl • Patterson, capítulo 4 • Monteiro – Tm = (T/Q + Tn) • Tm = Tempo de execução afetado pela melhoria • T = tempo de execução do programa afetado pela melhoria • Q = quantidade de melhoria • Tn = Tempo de execução não afetado – – – – Tm = 80 segundos / n + (100-80) 20 segundos = 80 segundos/n + 20 segundos 0 = 80 segundos/n Ou seja, não há quantidade alguma pela qual possamos melhorar a multiplicação para conseguir um aumento de cinco vezes no desempenho, se a multiplicação for responsável por apenas 80% do workload – A lei de Adamhl serve para lembrar do princípio de projeto: torne o caso comum mais rápido