1. (Cálculo de Speedup Vetorial). Um loop DAXPY ( Y=a^{*} X+Y ) é executado em:
Versão escalar: 12 instruções por elemento, 1000 elementos, \mathrm{CPI}=1.
Versão vetorial: 6 instruções totais (independentes do tamanho do vetor), 3 comboios (chimes), vetor de 64 elementos. Calcule:
a) Número total de ciclos na versão escalar.
b) Número total de ciclos na versão vetorial para 1000 elementos.
c) Speedup obtido com o vetorização.

Passo 1

O enunciado trata do cálculo de ciclos e speedup para o loop DAXPY Y = a\ast X + Y.
Na versão escalar, cada elemento gera 12 instruções, temos 1000 elementos e \mathrm{CPI}=1.
Na versão vetorial, o laço é feito com 6 instruções (independente de N), vetor de comprimento V=64 e pipeline com 3 chimes (ou seja, tempo de startup de 3 ciclos por instrução). Vamos achar
1. o total de ciclos na versão escalar;
2. o total de ciclos na versão vetorial para 1000 elementos;
3. o speedup definido por
\text{Speedup} = \frac{T_{\text{escalar}}}{T_{\text{vetorial}}}.

Passo 2

Ciclos na versão escalar: para cada um dos 1000 elementos são executadas 12 instruções e cada instrução consome 1 ciclo. Logo,
T_{\text{escalar}} = 12 \times 1000 \times 1 = 12000 \text{ ciclos}.

Passo 3

Ciclos na versão vetorial:
1. Número de vetores necessários:
\text{n\_vet} = \bigl\lceil\tfrac{1000}{64}\bigr\rceil = 16.
2. Ciclos por instrução vetorial em um vetor de 64 elementos:
startup de 3 chimes mais V-1 ciclos de emissão:
C_{\text{inst}} = 3 + (64 - 1) = 66.
3. Total de ciclos: 6 instruções por vetor vezes \text{n\_vet} vezes C_{\text{inst}}:
T_{\text{vetorial}} = 6 \times 16 \times 66 = 6336 \text{ ciclos}.

Passo 4

Speedup = razão entre os tempos:
\text{Speedup} = \frac{T_{\text{escalar}}}{T_{\text{vetorial}}} = \frac{12000}{6336} \approx 1{,}89.

Resposta

a) 12000 ciclos na versão escalar.
b) 6336 ciclos na versão vetorial.
c) Speedup \approx 1{,}89.

Exercícios relacionados