Desempenho e lei de Amdahl

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

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

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/T1/T. O speedup de uma mudança é S=Tantigo/TnovoS=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

TCPU=N⋅CPI⋅Tclk=N⋅CPIf.T_{CPU}=N\cdot CPI\cdot T_{clk}=\frac{N\cdot CPI}{f}.

Com N=108N=10^8, CPI=1,5 e f=2 GHz, o tempo é 0,0750{,}075 s. GHz é 10910^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×1,15=0,920{,}8\times1{,}15=0{,}92: redução de 8%, speedup 1/0,92≈1,0871/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=∑ipiCPIiCPI=\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.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 μs8{,}4\ \mu s. Um uniciclo a 100 MHz, com CPI=1 e o mesmo N, demora 10 μs10\ \mu s: o multiciclo é 10/8,4≈1,1910/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×5/4,2≈35,7%0{,}3\times5/4{,}2\approx35{,}7\% dos ciclos.

IPC, instruções por ciclo, é 1/CPI1/CPI para os mesmos totais. MIPS é f/(CPI×106)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 pp do tempo original, com 0≤p≤10\le p\le1, e fica s>0s>0 vezes mais rápida, só essa parte muda. Normalizando o tempo original para 1, o resto conserva 1−p1-p e a parte melhorada passa a p/sp/s:

Tnovo=1−p+ps,S=11−p+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≈1,66710/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,510/4=2{,}5.

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

12=0,2+0,8s,0,3=0,8s,s=0,80,3=83.\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)1/(1-p), para 0<p<10<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)(p/s)/(1-p+p/s). No primeiro exemplo, é 0,2/0,6=1/30{,}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×0,5=0,40{,}8\times0{,}5=0{,}4 do total. Acelerar só essa parte quatro vezes dá Tnovo=0,6+0,4/4=0,7T_{novo}=0{,}6+0{,}4/4=0{,}7, com speedup 10/710/7.

Para partes disjuntas, com frações originais pip_i e melhorias sis_i, usa Tnovo=1−∑pi+∑pi/siT_{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×106×2,2=110×10650\times10^6\times2,2=110\times10^6. Tempo=110×106/109=0,11110\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
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
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/31/(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
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
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
Amdahl com p=0

Calcula SS com p=0p=0 e explica o limite 1/(1−p)1/(1-p).

Pista

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

Mais uma pista

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

Solução

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

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)1/(1-p) a p=1p=1 sem tratar à parte: aí S=sS=s.

Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.