Aula 9 – Sumário Desempenho Factores e medidas de desempenho Noção de CPI (Clock Pulses per Instruction) Lei de Amdahl Avaliação do desempenho Aritmética Representação de inteiros e reais 2 1 Desempenho Desempenho Como avaliar o desempenho de um CPU ? Tipicamente pensa-se na frequência do sinal de relógio... Exemplo: considere dois CPUs com uma unidade de controlo multi-ciclo: CPU A Por exemplo, O CPU A funciona a 2GHz, logo é mais rápido que o CPU B, que funciona a 1.8GHZ demora 2 ciclos de relógio a executar uma instrução (em média) funciona a 1.0 GHz (T=1 ns) CPU B ... mas será que a frequência do sinal de relógio é uma boa medida !?? demora 3 ciclos de relógio a executar uma instrução (em média) funciona a 1.33 GHz (T=0.75 ns) Qual será o mais rápido? Podemos calcular o tempo médio por instrução: A frequência do sinal de relógio (apesar de importante) é apenas um de vários factores que contribuem para o desempenho de um processador... TA = 1.00 ns × 2 = 2.00 ns TB = 0.75 ns × 3 = 2.25 ns Tendo em conta apenas estes dados, a escolha iria para o processador A, pois em média demora menos tempo a executar cada instrução 3 Desempenho Desempenho O que será então uma boa medida para o desempenho? 4 Exemplo (tempos de execução, em segundos) Programa A medida objectiva mais precisa é o tempo de execução dos programas Computador A Computador B Computador C P1 2 10 20 P2 60 30 10 Mas… se um programa P1 corre mais depressa no computador A do que no computador B, nada nos diz que outro programa P2 verifique o mesmo. Para além do CPU, o tempo de execução dos programas também depende de outros factores por exemplo, das memórias utilizadas. Pode-se afirmar que: A é 5 vezes mais rápido do que B a correr o programa P1 B é 2 vezes mais rápido do que C a correr o programa P1 C é 6 vezes mais rápido do que A a correr o programa P2 ... Estas afirmações são válidas quanto ao desempenho mostrado a correr os programas P1 e P2 individualmente ... 5 6 1 Desempenho Desempenho Tendo em conta o peso de cada um dos programas no sistema obtém-se uma medida mais consistente Exemplo: vamos supor que P1 corre 20% das vezes e que P2 corre 80% das vezes Programa Computador A Computador B Computador C 2 10 20 P1 P2 Tempo médio (seg.) 60 30 10 48.4 26.0 12.0 Pode-se afirmar que: Conclusão: Só se conseguiria avaliar objectivamente o desempenho de um sistema caso se soubesse os tempos de execução de todos os programas, bem como a sua carga relativa... Impossível..., … mas conseguem-se aproximações válidas para os casos típicos Existem programas desenvolvidos com a finalidade de avaliar o desempenho – benchmarks – que visam estabelecer aproximações realistas Alguns exemplos B é 1.86 vezes mais rápido que A para os programas P1 e P2 SPECs (Standard Performance Evaluation Corporation) C é 4.03 vezes mais rápido que A para os programas P1 e P2 SYSMark (BapCo – Business Applications Performance Corporation) C é 2.17 vezes mais rápido que B para os programas P1 e P2 PCMark e 3DMark (FutureMark) 7 Desempenho 8 Desempenho Compilador Desempenho do processador Sintetizando: Conjunto de instruções Tempo de execução de um programa: Texecução = Nciclos × Trelógio Texecução = = Ninstruções × CPImédio × Trelógio Ninstruções × CPI frelógio = Ninstruções × CPImédio / frelógio Organização do sistema Hardware Ninstruções – número de instruções do programa CPImédio – número médio de ciclos por instrução Conjunto de instruções frelógio – frequência do sinal de relógio Organização do sistema 9 Desempenho Desempenho Conclusão O desempenho do processador depende de vários factores: Hardware (circuitos, tecnologia de fabrico) Organização (datapaths, unidade de controlo, etc.) Conjunto de instruções Compilador (e programador, claro está ☺) 10 Outras medidas populares MIPS Million of Instructions Per Second MIPS = Ninstruções Tempo de execução × 10 6 = frelógio CPI × 10 6 Depende apenas do CPI e da frequência de relógio... MFLOPS million floating-point operations per second MFLOPS = A frequência do relógio apenas está ligada aos dois primeiros factores... Noperações sobre nº s reais Tempo de execução × 10 6 Grande parte dos programas efectua operações sobre inteiros, pelo que esta medida pode não ser adequada 11 12 2 Lei de Amdahl Lei de Amdahl Lei de Amdahl O ganho global do sistema depende essencialmente de dois factores: Visa quantificar o ganho no desempenho de um sistema que resulta após a introdução (ou actualização) de um novo componente na arquitectura. Define-se o Ganho (ou speedup) como Ganho = Gc – ganho do componente Ganho trazido pelo novo componente para as situações em que é utilizado rc – rácio de utilização do componente fracção do tempo de execução (Told) durante o qual se irá tirar partido do novo componente Told Tnew Told – tempo de execução antes da introdução do novo componente Tnew – tempo de execução após a introdução do novo componente 13 Lei de Amdahl 14 Lei de Amdahl Colocando em equação, tem-se: Tnew = Told × (1 − rc ) + Told Exemplo Está-se a ponderar sobre qual dos seguintes upgrades se irá efectuar num processador: r × c Gc Hipótese 1 Sabendo que o Ganhoglobal é igual a Told / Tnew obtém-se: r Ganho global = (1 − rc ) + c G c Acelerar o cálculo das multiplicações por um factor de 20. Sabe-se o cálculo de multiplicações consome 10% do tempo de execução. −1 Hipótese 2 Melhorar todas as operações sobre números reais por um factor de aceleração de 5. As operações que envolvem números reais correspondem a 40% do tempo de execução. 15 Lei de Amdahl Lei de Amdahl Exemplo (cont.) rc = 0.1 rc = 0.4 Gc = 20 Gc = 5 1 0. 9 + 0. 1 20 = 1.105 Ganho 2 = Conclusão Hipótese 2: Hipótese 1: Ganho 1 = 16 O esforço para aumentar o desempenho de um sistema devem ser orientados para melhorar as situações mais frequentes 1 0.6 + 0.4 5 Uma grande melhoria num componente que é pouco utilizado tem pouco peso no desempenho global do sistema = 1.47 A lei de Amdahl pode ajudar a quantificar de forma objectiva as opções que podem ser tomadas Conclusão: a segunda hipótese é a mais vantajosa. 17 18 3 Representação de inteiros Números inteiros com sinal Aritmética Representação de números inteiros e reais A representação mais comum é a representação em complemento para 2 Boas propriedades para adição e subtracção Como já viram em AC I... No entanto, existem outras representações: Magnitude Complemento para 1 Excesso m 19 20 Representação de inteiros Representação de inteiros Magnitude Complemento para 1 1 bit de sinal seguido do valor absoluto do número O simétrico é a negação bit-a-bit Exemplos (em 8 bits) Exemplos (em 8 bits) 0 0000 0000 -0 1000 0000 0 0000 0000 1 0000 0001 -1 1000 0001 1 0000 0001 -1 1111 1110 41 0010 1001 -41 1010 1001 41 0010 1001 -41 1101 0110 78 0100 1110 -78 1100 1110 78 0100 1110 -78 1011 0001 Observações: -0 1111 1111 Observações: A notação não tem boas propriedades para a adição: se fizer N + (-N) o resultado não dá 0... Boas propriedades para adição, mas o ‘0’ pode ter duas representações diferentes... O ‘0’ pode ter duas representações diferentes... 21 Representação de inteiros 22 Representação de inteiros Excesso m Apesar de muito utilizada, a notação em complemento para 2 também tem um defeito: Representa-se o valor do número acrescido de m O menor número vale –m e é representado por 0’s Existe mais um número negativo do que o número de positivos Exemplo: excesso 128 (8 bits) O mesmo acontece com a notação excesso-m, onde esse desequilíbrio pode ainda ser maior 0 1000 0000 -0 1000 0000 1 1000 0001 -1 0111 1111 41 1010 1001 -41 0101 0111 78 1100 1110 -78 0011 0010 Observações: No entanto, não existe nenhuma notação “ideal”, i.e.: o zero ter um única representação existirem tantos números negativos como positivos ter boas propriedades para adição/subtracção Se m=2n-1, onde n é o número de bits, a notação é idêntica ao complemento para 2, mas com o bit de sinal trocado 23 24 4 Representação de números reais Representação de números reais Norma IEEE 754 (versão mais recente: Ago/2008) Formato de um número real (virgula flutuante) Até meados dos anos 80, a representação de números reais não estava normalizada... Cada fabricante usava a sua representação Para ultrapassar problemas de compatibilidade, surgiu em 1985 a primeira versão da norma IEEE 754 A norma define: Os formatos de representação dos números reais Como devem ser feitos os arredondamentos Como devem ser feitas as operações Tratamento de excepções (ex: divisão por zero, underflow, overflow) … Precisão simples – 32 bits – float 1 bit que define o sinal (0 – positivo; 1 – negativo) 8 bits para o expoente (representado em excesso 127) 23 bits para a mantissa, representada em magnitude 1 Bit de sinal 8 bits 23 bits Expoente Mantissa 32 bits Valor do número: (-1)sinal × 1.mantissa × 2expoente 25 Representação de números reais 26 Representação de números reais Exemplo: Qual será o valor do número real C160 0000(hex)? Significados especiais Expoente Mantissa Valor –127 == 0 0 128 == 0 ± infinito 128 != 0 NaN (not a number) –127 != 0 0.mantissa × Obs. Depende do sinal 2-126 Valores não reais Forma desnormalizada Sinal = 1 ⇒ número negativo Expoente = 1000 0010 = 130 ⇒ o expoente vale 3 (não esquecer que está em excesso 127) Mantissa = 0.1100 0000 … = 2-1 + 2-2 Exemplos: 0000 0000(hex) = 0.0 7F80 0000(hex) = +∞ FFFF FFFF(hex) = NaN 0040 0000(hex) = 0.5 * 2-126 = 0.5 + 0.25 = 0.75 O valor do número será então: –1.75 × 23 = –14.0 27 28 Representação de números reais Precisão dupla – double Obtêm-se os valores de forma idêntica, mas os números são representados em 64 bits com 11 bits para o expoente (em excesso 1023) e 52 bits para a mantissa Gamas de representação (na forma normal) Precisão simples Precisão dupla ≈ ± 1.2 × 10-38 a 3.4 × 1038 ≈ ± 2.2 × 10-308 a 1.8 × 10308 29 5