Conteúdos da cadeira

Introdução à computação paralela

Speedup, eficiência e tempo de execução, com um cálculo completo e a sua interpretação.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

Um programa sequencial corre as instruções uma a uma. Um programa paralelo divide o trabalho por vários núcleos que avançam ao mesmo tempo. Esta página fixa o vocabulário mínimo da cadeira e as três medidas com que vais julgar qualquer paralelização.

O vocabulário base

Um processo é um programa em execução com o seu espaço de memória. Uma thread é uma linha de execução dentro de um processo, que partilha a memória com as outras threads do mesmo processo. Um núcleo (core) é a unidade física do processador que executa instruções. Na parte paralela da cadeira trabalhas quase sempre com threads do mesmo processo em memória partilhada, tipicamente com OpenMP.

Dizemos que um trecho é paralelizável quando pode ser dividido em partes independentes. Somar os elementos de um vetor é paralelizável, porque cada núcleo soma uma fatia. Calcular os dígitos de uma recorrência em que cada valor depende do anterior não é, porque a ordem é obrigatória.

As três medidas

Corre o mesmo programa em 1 núcleo e em pp núcleos e mede os tempos de parede (wall-clock), T1T_1 e TpT_p. A partir daí:

  • Speedup: Sp=T1/TpS_p = T_1 / T_p. Quantas vezes mais rápido ficou.
  • Eficiência: Ep=Sp/pE_p = S_p / p. Que fração do hardware foi aproveitada.
  • Tempo de execução: TpT_p em segundos, a medida que o utilizador sente.

O speedup ideal com pp núcleos é pp, com eficiência de 100 por cento. Na prática fica sempre abaixo, por três razões que vais reencontrar a cadeira toda. Há trabalho que não se divide (a fração serial), há custo de coordenação (criar threads, sincronizar, comunicar) e há recursos partilhados que saturam (a memória e a cache).

Exemplo completo

Um programa de tratamento de imagem demora T1=12T_1 = 12 s num núcleo e T4=4T_4 = 4 s em 4 núcleos. Calculamos:

S4=124=3,0E4=3,04=0,75S_4 = \frac{12}{4} = 3{,}0 \qquad E_4 = \frac{3{,}0}{4} = 0{,}75

O speedup é 3 e a eficiência é 75 por cento. A interpretação: dos 4 núcleos, um quarto do potencial perdeu-se. Os 12 s de trabalho sequencial viraram 4 s de relógio em vez dos 3 s ideais, por isso 1 s por núcleo foi para a fração serial e para o custo de coordenação. Se o enunciado pedir para julgar a paralelização, é isto que se responde, o número mais o destino do tempo perdido.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

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

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

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.