Você está na página 1de 33

Sistemas de

Computação
Aula 3: Entendendo Desempenho

Leandro Santiago
Entendendo
Desempenho
Desempenho
→ Desempenho é a chave para entender a motivação subjacente
para o hardware e sua organização
→ Medir, relatar e resumir o desempenho permite que os usuários
façam:
◦ escolhas inteligentes
◦ vejam além do hype do marketing

• Por que alguns hardwares são melhores que outro para programas
diferentes?
• Quais fatores de desempenho do sistema são relacionados ao hardware?
• Como o conjunto de instruções de uma máquina afetam o desempenho?
3
O que medimos? Define o desempenho...

→ Quão rápido é Concorde em comparação com o Boeing 747?


→ Quão grande é o Boeing 747 em comparação com Douglas DC-8?
→ Então quais desses aviões tem o melhor desempenho?
4
Entendendo Desempenho
→ O algoritmo determina o número de instruções do código fonte e
o número de operações de I/O executadas

→ A linguagem de programação, o compilador e a arquitetura


determinam o número de instruções de máquina executadas por
cada instrução do código fonte

→ O processador e o sistema de memória determinam a rapidez


com que as instruções são executadas

→ O sistema de I/O (hardware e sistema operacional) determina a


rapidez com que as operações de I/O são executadas

5
Métricas de Desempenho
→ Métricas de desempenho para processadores - avalia o
desempenho de uma unidade de processamento, normalmente
feito medindo a velocidade ou o número de operações que ela faz
em um determinado período de tempo

→ Métricas de desempenho para aplicativos paralelos - avalia o


desempenho de um aplicativo paralelo, normalmente feito
comparando o tempo de execução com várias unidades de
processamento em relação ao tempo de execução com apenas
uma unidade

Estamos mais interessados em métricas que medem o desempenho dos


processadores
6
Medidas de Desempenho para Processadores

→ MIPS - Milhões de instruções por segundo

→ FLOPS - Operações de ponto flutuante por segundo

→ SPECint - Benchmarks SPEC (Standard Performance Evaluation


Corporation) que avaliam o desempenho do processador em
aritmética de inteiros (primeiro lançamento em 1992)

→ SPECfp - Benchmarks SPEC que avaliam o desempenho do


processador em operações de ponto flutuante (primeiro
lançamento em 1989)

7
Medidas de Desempenho para Processadores

→ Whetstone - Benchmarks sintéticos para avaliar o desempenho do


processador em operações de ponto flutuante (primeiro
lançamento em 1972)

→ Dhrystone - Benchmarks sintéticos para avaliar o desempenho do


processador em aritmética de inteiros (primeiro lançamento em
1984)

8
Desempenho Computacional: TEMPO, TEMPO,
TEMPO!!!
→ Tempo de resposta (tempo decorrido, latência)
◦ Quanto tempo leva para o meu job rodar?
◦ Quanto tempo para executar (iniciar e terminar) meu job?
◦ Quanto tempo devo esperar por uma query no banco de dados?

→ Vazão (Throughput)
◦ Quantos jobs a máquina pode rodar de uma vez?
◦ Qual é a taxa de execução média?
◦ Quanto trabalho está sendo feito?

→ Se fizer um upgrade na máquina com um novo processador, o que vamos


aumentar?
→ Se adicionarmos uma nova máquina no laboratório, o que vamos aumentar?
9
Tempo de Execução
→ Tempo decorrido
◦ Conta tudo do início até o fim (acesso no disco e memória, I/O)
◦ É uma medida útil, mas não é muito boa para fins de comparação
tempo decorrido = tempo CPU + tempo de espera (I/O, outros
programas)

→ Tempo de CPU
◦ Não conta espera por I/O ou tempo gasto rodando outros
programas
◦ Pode ser dividido em tempo de CPU do usuário e tempo de CPU
do sistema (chamada de SO)
tempo CPU = tempo CPU usuário + tempo CPU sistema
10
Tempo de Execução

→ Nosso foco: tempo de CPU do usuário (tempo de execução da


CPU ou, simplesmente, tempo de execução)
◦ Tempo gasto executando as linhas de código que estão no nosso
programa

11
Definição de Desempenho
→ Para um programa que roda na máquina X:

Desempenhox = 1
Tempo_de_execucaox

→ X é n vezes mais rápido que Y:

Desempenhox Tempo_de_execucaoy
Desempenhoy = Tempo_de_execucaox =n

12
Ciclos de Clock
→ Frequentemente usamos ciclos para calcular o tempo de execução

→ Quase todos os computadores usam um clock que determina


quando os eventos ocorrem no hardware. Esses intervalos de
tempo discretos são chamados de ciclos de clock (ou ticks, clocks,
ciclos).

13
Ciclos de Clock
→ A duração de um ciclo completo do clock é o período do clock e o
número de ciclos por segundo é a taxa do clock (ou frequência do
clock), que é o inverso do período do clock.

Frequencia_clock(Hz) = 1
Periodo_de_clock(s)

→ Período de clock (tempo) = duração do ciclo do clock (segundos)


Ex: 250ps (picossegundos) = 0.25 ns (nanossegundos) = 250 × 10−12
s
→ Velocidade de clock (frequência) = ciclos por segundo
Ex: Um clock com 200 Mhz tem:
Tempo de ciclo = 1/(200 × 106 ) × 109 = 5 nanossegundos (ns)
14
Equação de Desempenho I

segundos ciclos segundos


programa = programa × ciclo

equivalente (Programa P)

Tempo_execucao_CPUp = Ciclos_clock_CPUp × Tempo_ciclo_clock

equivalente

Ciclos_clock_CPUp
Tempo_execucao_CPUp = Velocidade_clock
15
Equação de Desempenho I

→ Então para melhorar o desempenho temos que:

◦ Reduzir o número de ciclos do programa, ou

◦ Reduzir o tempo do ciclo de clock, ou

◦ Aumentar a velocidade de clock

16
Quantos Ciclos são necessários para um programa?
→ Poderia assumir que # de ciclos = # de instruções

→ Essa suposição é incorreta! Porque:


◦ Instruções diferentes levam quantidade de tempo (ciclos)
diferentes
◦ Por que…? 17
Quantos Ciclos são necessários para um programa?

→ Multiplicação leva mais tempo que a adição

→ Operações de ponto flutuante demoram mais que de inteiros

→ Acesso de memória leva mais tempo que acesso nos registradores

→ Ponto importante: trocar o tempo de ciclo geralmente troca o


número de ciclos necessários por várias instruções porque isso
significa que o projeto do hardware foi alterado
18
Exemplo
→ Nosso programa favorito roda em 10 segundos no computador A,
que tem um clock de 400 Mhz.
→ Estamos ajudando um projetista de computador a construir um
novo computador B, que vai rodar este programa em 6 segundos.
O projetista pode usar novas tecnologias para aumentar a
frequência de clock, mas ele nos informou que esse aumento
afetará o resto do projeto da CPU, fazendo com que o computador
B precise 1,2 vezes mais ciclos de clock que o computador A para o
mesmo programa.
→ Qual velocidade deveríamos sugerir ao projetista?

19
Terminologia
→ Um dado programa precisa
◦ algum número de instruções
◦ algum número de ciclos
◦ algum número de segundos

→ Termos referentes à esses valores


◦ tempo de ciclo (segundos por ciclo)
◦ velocidade de clock (frequência, ciclos por segundo)
◦ (média) CPI (ciclos de clock por instrução)
aplicações com ponto flutuante possui maior média de CPI
◦ MIPS (milhões de instruções por segundo)
É maior para programas usando instruções simples
20
Medida de Desempenho
→ Desempenho é determinado pelo tempo de execução
→ Alguma dessas outras medidas medem desempenho?
◦ # de ciclos para executar um programa?
◦ # de instruções no programa?
◦ # de ciclos por segundo?
◦ média # de ciclos por instrução?
◦ média # de instruções por segundo?

→ Armadilha: achar que uma variável é indicativo de desempenho


quando de fato ela não é

21
Equação de Desempenho II

Tempo_CPU_Programa =
Contagem_instrucao × media_CPI × Tempo_ciclo_clock

equivalente

Contagem_instrucao×media_CPI
Tempo_CPU_Programa = Velocidade_clock

→ Derivado da Equação de Desempenho I


22
Exemplo I de CPI
→ Suponha que temos duas implementações do mesmo ISA. Para um
determinado programa:
◦ o computador A tem um tempo de ciclo de clock de 10 ns e um
CPI de 2,0
◦ o computador B tem um tempo de ciclo de clock de 20 ns e um
CPI de 1,2

→ Qual computador é mais rápido para esse programa e o quanto


mais rápido?
→ Se os dois computadores tem o mesmo ISA, quais de nossas
métricas permanecerão (frequência, CPI, tempo de execução,
MIPS) idênticas?
23
Exemplo II de CPI
→ Um projetista de compilador está tentando decidir entre duas
sequências de código para uma máquina em particular.
→ Baseado na implementação do hardware, há 3 classes diferentes
de instruções: Classe A, Classe B e Classe C, requerendo 1, 2 e 3
ciclos (respectivamente).
→ A primeira sequência de código tem 5 instruções:
2 de A, 1 de B e 2 de C.
A segunda sequência tem 6 instruções:
4 de A, 1 de B e 1 de C.
→ Qual sequência vai ser mais rápida? Quanto mais rápida? Qual é a
CPI de cada sequência?
24
MIPS
→ MIPS: Million Instructions Per Second

Contagem_instrucao
MIPS = Tempo_execucao×106

→ 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
25
Exemplo MIPS
→ Dois compiladores diferentes estão sendo testados para um
computador de 500 MHz com 3 classes de instruções diferentes:
Class A, Classe B e Classe C, que requerem 1, 2 e 3 ciclos
(respectivamente). Ambos compiladores estão usados para
produzir código para um grande pedaço de software.
→ Compilador 1 gera código com 5 bilhões de instruções da Classe A,
1 bilhão da Classe B e 1 bilhão da Classe C.
→ Compilador 2 gera código com 10 bilhões de instruções da Classe
A, 1 bilhão da Classe B e 1 bilhão da Classe C.
→ Qual sequência será mais rápida de acordo com o MIPS?
→ Qual sequência será mais rápida de acordo com o tempo de
execução?
26
Benchmarks
→ Melhor desempenho determinado pela execução de um aplicativo
real
◦ Usar programas típicos da carga de trabalho esperada
◦ ou, típica da classe de aplicativos esperada. Ex: compiladores /
editores, aplicativos científicos, gráficos etc

→ Benchmarks pequenos
◦ agradável para arquitetos e designers
◦ fácil de padronizar
◦ pode ser abusado

→ Suítes de Benchmark
◦ SPEC: combinação de código de organização da indústria
◦ Linpack: pacote de álgebra linear 27
Lei de Amdahl

Tempo_execucao_melhoria =
Tempo_afetado_melhoria
Tempo_nao_afetado_melhoria + Quantidade_melhoria

→ Princípio de design: torne o caso comum rápido 28


Exemplos

→ Exemplo: Suponha um programa executado em 100 segundos


com operações de multiplicação responsáveis por 80 segundos
desse tempo.
◦ Em quanto tempo preciso melhorar a velocidade da multiplicação
para rodar 4 vezes mais rápido? e 5 vezes mais rápido?

29
Exemplos
→ Suponha que melhoramos um computador para realizar todas as
operações de ponto flutuante 5 vezes mais rápidas. O tempo de
execução de um benchmark antes da melhoria é 10 segundos.
Qual será a aceleração (speedup) se a metade de 10 segundos é
gasta executando operações de ponto flutuante?
→ Estamos procurando um benchmark para mostrar a nova unidade
de ponto flutuante descrita acima e queremos um benchmark que
mostre um speedup de 3. Estamos considerando que roda em 100
segundos com o hardware antigo.
Quanto tempo de execução as instruções de ponto flutuante
teriam que levar em conta neste programa para gerar a
aceleração desejada nesse benchmark?
30
Resumo
→ Desempenho é específico à um programa
Tempo de execução total é um resumo consistente de
desempenho

→ Um dado aumento de desempenho da arquitetura ocorre com:


◦ Aumento na velocidade de clock
◦ Melhorias na organização do processador que reduz o CPI
◦ Melhorias no compilador que reduz o CPI e/ou a quantidade de
instrução

→ Armadilha: esperar que a melhoria em um aspecto do


desempenho de uma máquina afete o desempenho total

31
Próxima Aula

→ Representação de Informações no Computador

32
leandro@ic.uff.br

Você também pode gostar