# Desempenho e lei de Amdahl

Tempo de CPU, CPI ponderado, speedup e limites de otimizações parciais.

Página: https://resumos.rgo.pt/cadeiras/fsc/desempenho/

Um computador pode executar mais instruções por segundo e ainda demorar mais a resolver um problema, pois o tempo depende de quantas instruções o programa executa, do custo médio de cada uma e do período do relógio.

## O que estamos a medir

Latência é o tempo para concluir uma tarefa, enquanto throughput é o número de tarefas concluídas por unidade de tempo. Sobrepor tarefas pode aumentar throughput sem reduzir a latência de uma tarefa individual.

Tempo decorrido inclui espera por entrada/saída e outras pausas, enquanto tempo de CPU mede o tempo em que o CPU trabalha para o processo, incluindo a componente de utilizador e a de sistema. Compara a mesma medida, o mesmo trabalho e a mesma entrada.

O desempenho para uma tarefa é proporcional a $1/T$. O speedup de uma mudança é $S=T_{antigo}/T_{novo}$. Se uma tarefa passa de 10 s para 8 s, o speedup é 1,25 e o tempo diminuiu 20%. Não são duas maneiras equivalentes de dizer uma diminuição de 25%.

## Equação de execução

Se N é o número de instruções máquina **executadas**, CPI o número médio de ciclos por instrução e f a frequência, com

$$
T_{CPU}=N\cdot CPI\cdot T_{clk}=\frac{N\cdot CPI}{f}.
$$

Com $N=10^8$, CPI=1,5 e f=2 GHz, o tempo é $0{,}075$ s. GHz é $10^9$ ciclos/s; não insiras 2 na fórmula mantendo N sem conversão de unidades.

Um compilador pode reduzir N e aumentar CPI. Se N passa a 80% e CPI a 115%, com a mesma frequência, o tempo passa a $0{,}8\times1{,}15=0{,}92$: redução de 8%, speedup $1/0{,}92\approx1{,}087$.

## CPI ponderado

Com classes de instruções, o CPI médio pesa cada classe pela fração do **número de instruções** nela: $CPI=\sum_i p_iCPI_i$. As frações somam 1.

Um programa com 50% R, 30% lw, 10% sw e 10% beq, no CPU multiciclo, tem, com

$$
CPI=0{,}5(4)+0{,}3(5)+0{,}1(4)+0{,}1(3)=4{,}2.
$$

Se forem 1000 instruções, são 4200 ciclos. A 500 MHz, demora $8{,}4\ \mu s$. Um uniciclo a 100 MHz, com CPI=1 e o mesmo N, demora $10\ \mu s$: o multiciclo é $10/8{,}4\approx1{,}19$ vezes mais rápido neste caso.

Não uses a fração de tempo de uma classe como se fosse a fração de instruções. No exemplo, os loads são 30% das instruções, mas ocupam $0{,}3\times5/4{,}2\approx35{,}7\%$ dos ciclos.

IPC, instruções por ciclo, é $1/CPI$ para os mesmos totais. MIPS é $f/(CPI\times10^6)$. Uma taxa MIPS maior não prova menor tempo se os programas ou ISAs exigirem N diferente.

Comparar cargas de trabalho

Em benchmarks, explicita os pesos: a soma dos tempos de tarefas representa uma carga de trabalho; a média geométrica de razões é outra forma de agregação, não o tempo total dessa carga.

## Lei de Amdahl

Se uma parte ocupa fração $p$ do **tempo original**, com $0\le p\le1$, e fica $s>0$ vezes mais rápida, só essa parte muda. Normalizando o tempo original para 1, o resto conserva $1-p$ e a parte melhorada passa a $p/s$:

$$
T_{novo}=1-p+\frac ps,\qquad S=\frac1{1-p+p/s}.
$$

Considera uma tarefa que demora 10 s: 4 s ficam inalterados e 6 s pertencem à parte melhorada. Se essa parte ficar três vezes mais rápida, passa de 6 s para 2 s. O total passa para 6 s e o speedup é $10/6=5/3\approx1{,}667$.

Original, 10 s

4 s6 s

Parte 3 vezes mais rápida, total 6 s

4 s2 s

Limite ideal, 4 s

4 s

Segmento contínuo: tempo inalterado. Segmento tracejado: parte melhorada. Cada barra ocupa uma escala de 0 a 10 segundos.

As barras usam a mesma escala. Só o segmento de 6 s encolhe; os 4 s restantes continuam a impor um limite. Mesmo eliminar todo o tempo da parte melhorada deixa 4 s, por isso o speedup não ultrapassa $10/4=2{,}5$.

Ideia-chave

Para obter um speedup objetivo só com essa parte, com $0<p<1$, resolve a equação em $s$; se o objetivo atingir ou exceder **$1/(1-p)$**, não existe $s$ finito que o alcance. O caso $p=0$ é separado: a mudança não toca o tempo total e $S=1$ para qualquer $s$.

Para obter speedup 2 com p=0,8, o tempo novo tem de ser metade do original. Isola o tempo da parte melhorada:

$$
\frac12=0{,}2+\frac{0{,}8}{s},\qquad 0{,}3=\frac{0{,}8}{s},\qquad s=\frac{0{,}8}{0{,}3}=\frac83.
$$

O limite $1/(1-p)$, para $0<p<1$, só é atingido quando a parte melhorada demora zero. Se p=0, a alteração não afeta o tempo total e S=1. Se p=1, toda a tarefa é melhorada e o speedup é s.

Depois da melhoria, a parte otimizada já não ocupa p do tempo. Ocupa $(p/s)/(1-p+p/s)$. No primeiro exemplo, é $0{,}2/0{,}6=1/3$.

## Percentagens aninhadas e mudanças múltiplas

Se 80% do tempo é cálculo numérico e metade desse cálculo é trigonometria, a trigonometria ocupa $0{,}8\times0{,}5=0{,}4$ do total. Acelerar só essa parte quatro vezes dá $T_{novo}=0{,}6+0{,}4/4=0{,}7$, com speedup $10/7$.

Para partes **disjuntas**, com frações originais $p_i$ e melhorias $s_i$, usa $T_{novo}=1-\sum p_i+\sum p_i/s_i$. Não somes duas vezes o tempo de partes sobrepostas. Se aplicares melhorias sucessivas usando percentagens da execução intermédia, recalcula os pesos antes da segunda conta.

Uma frequência maior pode exigir CPI maior ou fazer esperar mais ciclos por memória. Substitui os valores finais na equação de execução. A diferença que interessa ao utilizador é o tempo para o trabalho definido.

## Exercícios

Média por instruções

Um programa tem 40% instruções de CPI=1, 40% de CPI=2 e 20% de CPI=5. São 50 milhões de instruções a 1 GHz. Qual é o tempo de CPU em segundos?

Pista

Calcula CPI médio antes do tempo.

Mais uma pista

CPI=0,4+0,8+1=2,2.

Solução

CPI=2,2 e ciclos=$50\times10^6\times2,2=110\times10^6$. Tempo=$110\times10^6/10^9=0,11$ s. Os 20% de CPI=5 ocupam 1/2,2 do tempo, aproximadamente 45,45%, não 20%.

Erros frequentes

As percentagens dadas são de instruções, não de tempo, por isso o CPI médio pesa cada classe pela sua fração.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/fsc/desempenho/#cpi-ponderado)

Percentagem dentro de outra

60% do tempo original é processamento de imagens; metade dessa parte é filtragem. A filtragem fica 5 vezes mais rápida. Qual é o speedup global?

Pista

Converte primeiro a percentagem aninhada para fração do total.

Mais uma pista

A parte melhorada ocupa 0,6×0,5=0,3.

Solução

p=0,3, tempo novo normalizado=0,7+0,3/5=0,76. Speedup=1/0,76=25/19≈1,315789. A redução de tempo é 24%. Não acelerámos todo o processamento de imagens.

Erros frequentes

Usar p=0,5 ou p=0,6 não corresponde à parte descrita.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/fsc/desempenho/#percentagens-aninhadas-e-mudan%C3%A7as-m%C3%BAltiplas)

Um objetivo impossível

Uma parte de 25% do tempo pode ser melhorada sem limite. É possível atingir speedup 2 só com essa alteração?

Pista

O restante 75% nunca fica mais rápido.

Solução

O limite é $1/(1-0,25)=4/3$, menor que 2. Mesmo eliminar completamente a parte melhorada deixa 75% do tempo original. Não existe fator s finito ou infinito que dê speedup 2 apenas com essa mudança.

Confere a tua resposta:

*   Limite 4/3, abaixo de 2.
*   Os 75% restantes impedem o objetivo.

Erros frequentes

Não interpretes melhoria infinita de uma parte como tempo total zero, porque os restantes 75% nunca desaparecem.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/fsc/desempenho/#lei-de-amdahl)

Menos instruções, mais ciclos

Um compilador reduz N em 30%, aumenta CPI em 20% e não altera f. Calcula a razão entre tempo novo e antigo e o speedup.

Pista

Os fatores de N e CPI multiplicam-se.

Solução

A razão de tempos é 0,7×1,2=0,84. O tempo diminui 16%; speedup=1/0,84=25/21≈1,190476. Menos instruções ajudou, mas parte desse ganho foi absorvida pelo aumento de CPI.

Confere a tua resposta:

*   Tempo novo 0,84 do antigo; speedup 25/21.
*   Distingue redução de tempo 16% de speedup.

Erros frequentes

Não subtraias diretamente 30% e 20%; as mudanças multiplicam fatores.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/fsc/desempenho/#equa%C3%A7%C3%A3o-de-execu%C3%A7%C3%A3o)

Duas melhorias disjuntas

Uma execução gasta 20% do tempo em A e 30% em B, sem sobreposição. A fica 2 vezes mais rápida e B 3 vezes. Calcula o tempo novo normalizado e a fração nova de tempo em B.

Pista

As partes não melhoradas ocupam 50%.

Mais uma pista

B passa a custar 0,3/3=0,1 do tempo antigo.

Solução

O tempo novo é 0,5+0,2/2+0,3/3=0,7. Speedup=10/7. A fração nova em B é 0,1/0,7=1/7≈14,2857%. A fração 30% era relativa ao total antigo, não ao novo.

Confere a tua resposta:

*   Tempo normalizado 0,7 e speedup 10/7.
*   Fração nova de B é 1/7.

Erros frequentes

Não mantenhas a percentagem de B inalterada depois de acelerar essa parte.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/fsc/desempenho/#percentagens-aninhadas-e-mudan%C3%A7as-m%C3%BAltiplas)

Amdahl com p=0

Calcula $S$ com $p=0$ e explica o limite $1/(1-p)$.

Pista

Substitui $p=0$ na fórmula com $s$ finito e $s>0$.

Mais uma pista

$S=1$ para qualquer $s>0$; o limite $1/(1-p)$ vale para $0\le p<1$.

Solução

Com $s>0$, $S=1/((1-p)+p/s)$. Para $p=0$, dá $S=1/(1+0)=1$ para qualquer $s>0$: a melhoria não toca o tempo total. Para $0<p<1$, $p/s\to 0$ quando $s\to\infty$, logo $S\to 1/(1-p)$. Para $p=1$, $S=1/(0+1/s)=s$, que diverge com $s$.

Confere a tua resposta:

*   Substituíste p=0 na fórmula com s>0
*   Distinguiste p=0, 0<p<1 e p=1 no limite

Erros frequentes

Não apliques o limite $1/(1-p)$ a $p=1$ sem tratar à parte: aí $S=s$.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/fsc/desempenho/#lei-de-amdahl)
