AULA DE REVISÃO 3 ILP
Exercício 1: Considere um bloco de código com 15 instruções cada uma com tempo de execução Tex. Elas são executadas numa unidade pipeline de 5 estágios. Os overheads do pipeline são ignorados. Quanto tempo é consumido para executar as 15 instruções pela CPU pipeline? (suponha que não há hazards) Ilustre a resposta figura 1 ilustração de solução em pipelining 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Exercício 1: (solução) Considere um bloco de código com 15 instruções cada uma com tempo de execução Tex. Elas são executadas numa unidade pipeline de 5 estágios. Os overheads do pipeline são ignorados. Quanto tempo é consumido para executar as 15 instruções pela CPU pipeline? (suponha que não há hazards) Ilustre a resposta O tempo gasto no processamento de M instruções em um pipeline com K estágios e ciclo de máquina igual a t é dado por: T = [ K + (M 1 )] * t Para K=5, M=15 e t=tex/5 temos que T = (19 * Tex)/5
Exercício 2: Considere o seguinte programa em linguagem de montagem: I1: lw $a1, 4($sp) I2: sw $a1, 0($v0) I3: addi $sp, $sp, -4 I4: sw $a0, 8($sp) I5: addi $a0, $a0, -2 Liste todos os hazards de dados em potencial e os registradores que causam esses hazards. Identifique o tipo de dependência WAW, RAW, ou WAR. Sentença Registrador Dependência
Exercício 2: (solução) Considere o seguinte programa em linguagem de montagem: I1: I2: I3: I4: I5: lw $a1, 4($sp) sw $a1, 0($v0) addi $sp, $sp, -4 sw $a0, 8($sp) addi $a0, $a0, -2 # $a1 Mem[4 + $sp] # $a1 Mem[0 + $v0] # $sp $sp 4 # $a0 Mem[8+$sp] # $a0 $a0-2 Liste todos os hazards de dados em potencial e os registradores que causam esses hazards. Identifique o tipo de dependência WAW, RAW, ou WAR. Sentença Registrador Dependência I1 e I2 $a1 RAW I1 e I3 $sp WAR I3 e I4 $sp RAW I4 e I5 $a0 WAR
Exercício 3: Considere os estágios da via-de-dados em pipeline do MIPS I Instruction Fetch D Instruction Decode X Execution M Memory Access W Write Back stage Para uma determinada sequência de código, indique como as instruções fluem através do pipeline. Considere o seguinte: Todas as referências de instrução são encontradas no cache de instrução e requer um único ciclo; Todas as referências por dados são encontradas no cache de dados e requer um único ciclo; Os desvios (branches) são preditos como não tomados (not taken); Assuma que a reescrita de registradores ocorre na primeira metade do estágio W e a leitura de registradores na última metade do estágio D; Assuma que não há hazards estruturais; Assuma que não há hardware para suportar forwarding/bypassing. Execute o conjunto de instruções na figura 2, considerando uma máquina com pipeline MIPS. Utilize a tabela para elaborar a sua resposta. Na tabela, coloque o estágio do pipeline onde cada instrução se encontra, durante cada ciclo de relógio. Preencha a tabela claramente. Mostre onde as dependências aparecem e quando os hazards surgem. I1: add R1, R2, R3 I2: sub R2, R3, R2 I3: add R3, R1, R3 I4: lw R4, 10 (R7) I5: add R5, R1, R2 Figura 2 - ilustração de solução em pipelining 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Exercício 3: (solução) Considere os estágios da via-de-dados em pipeline do MIPS I Instruction Fetch D Instruction Decode X Execution M Memory Access W Write Back stage Para uma determinada sequência de código, indique como as instruções fluem através do pipeline. Considere o seguinte: Todas as referências de instrução são encontradas no cache de instrução e requer um único ciclo; Todas as referências por dados são encontradas no cache de dados e requer um único ciclo; Os desvios (branches) são preditos como não tomados (not taken); Assuma que a reescrita de registradores ocorre na primeira metade do estágio W e a leitura de registradores na última metade do estágio D; Assuma que não há hazards estruturais; Assuma que não há hardware para suportar forwarding/bypassing. Execute o conjunto de instruções na figura 2, considerando uma máquina com pipeline MIPS. Utilize a tabela para elaborar a sua resposta. Na tabela, coloque o estágio do pipeline onde cada instrução se encontra, durante cada ciclo de relógio. Preencha a tabela claramente. Mostre onde as dependências aparecem e quando os hazards surgem. Figura 2 - ilustração de solução em pipelining 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 I1: add R1, R2, R3 I D X M W I2: sub R2, R3, R2 I D X M W I3: add R3, R1, R3 I - D X M W I4: lw R4, 10 (R7) I D X M W I5: add R5, R1, R2 I D X M W
Exercício 4: Execute o conjunto de instruções na figura 3, considerando uma máquina com pipeline MIPS. Utilize a tabela para elaborar a sua resposta. Na tabela, coloque o estágio do pipeline onde cada instrução se encontra, durante cada ciclo de relógio. Preencha a tabela claramente. Mostre onde as dependências aparecem e quando os hazards surgem. Figura 3 - ilustração de solução em pipelining Instruções 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 I1: ADD R1, R2, R3 I2: SW R1, 100(R2) I3: LW R7, 2000(R2) I4: ADD R5, R7, R1 I5: LW R8, 2004(R2) I6: SW R7, 208(R8) I7: ADD R8, R8, R2 I8: LW R9, 1012(R8) I9: SW R9, 116(R8) Otimize a execução da sequência de código apresentada no item anterior. Reduza os efeitos dos hazards, efetuando um escalonamento da sequência de código (instruction scheduling), garantindo a semântica do código original. Apresente e simule o código escalonado na tabela da figura 4. Figura 4 - ilustração de solução em pipelining Instruções 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 I1: I2: I3: I4: I5: I6: I7: I8: I9:
Exercício 4: (solução) Execute o conjunto de instruções na figura 3, considerando uma máquina com pipeline MIPS. Utilize a tabela para elaborar a sua resposta. Na tabela, coloque o estágio do pipeline onde cada instrução se encontra, durante cada ciclo de relógio. Preencha a tabela claramente. Mostre onde as dependências aparecem e quando os hazards surgem. Figura 3 - ilustração de solução em pipelining Instruções 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 I1: ADD R1, R2, R3 I D X M W I2: SW R1, 100(R2) I - - D X M W I3: LW R7, 2000(R2) I D X M W I4: ADD R5, R7, R1 I - - D X M W I5: LW R8, 2004(R2) I D X M W I6: SW R7, 208(R8) I - - D X M W I7: ADD R8, R8, R2 I D X M W I8: LW R9, 1012(R8) I D X M W I9: SW R9, 116(R8) I - - D X M Otimize a execução da sequência de código apresentada no item anterior. Reduza os efeitos dos hazards, efetuando um escalonamento da sequência de código (instruction scheduling), garantindo a semântica do código original. Apresente e simule o código escalonado na tabela da figura 4. Figura 4 - ilustração de solução em pipelining Instruções 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 I1: ADD R1, R2, R3 I D X M W I2: LW R7, 2000(R2) I D X M W I3: LW R8, 2004(R2) I D X M W I4: SW R1, 100(R2) I D X M W I5: ADD R5, R7, R1 I D X M W I6: SW R7, 208(R8) I D X M W I7: ADD R8, R8, R2 I D X M W I8: LW R9, 1012(R8) I - D X M W I9: SW R9, 116(R8) I - - D X M W
Exercício 5: (POSCOMP 2005-21) Considere uma CPU usando uma estrutura pipeline com 5 estágios (IF, ID, EX, MEM, WB) e com memórias de dados e de instruções separadas, sem mecanismo de data forwarding, escrita no banco de registradores na borda de subida do relógio e leitura na borda de descida do relógio e o conjunto de instruções a seguir: I1: lw $2, 100($5) I2: add $1, $2, $3 I3: sub $3, $2, $1 I4: sw $2, 50($1) I5: add $2, $3, $3 I6: sub $2, $2, $4 Quantos são gastos para a execução deste código?
Exercício 5: (solução) (POSCOMP 2005-21) Considere uma CPU usando uma estrutura pipeline com 5 estágios (IF, ID, EX, MEM, WB) e com memórias de dados e de instruções separadas, sem mecanismo de data forwarding, escrita no banco de registradores na borda de subida do relógio e leitura na borda de descida do relógio e o conjunto de instruções a seguir: I1: lw $2, 100($5) I2: add $1, $2, $3 I3: sub $3, $2, $1 I4: sw $2, 50($1) I5: add $2, $3, $3 I6: sub $2, $2, $4 Quantos são gastos para a execução deste código? ilustração de solução em pipelining 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 I1: lw $2, 100($5) I D X M W I2: add $1, $2, $3 I - - D X M W I3: sub $3, $2, $1 I - - D X M W I4: sw $2, 50($1) I D X M W I5: add $2, $3, $3 I - D X M W I6: sub $2, $2, $4 I - - D X M W
Exercício 6: Considere uma CPU usando uma estrutura pipeline com 5 estágios (IF, ID, EX, MEM, WB) e com memórias de dados e de instruções separadas, com mecanismo de data forwarding, com previsão estática de que o desvio não se confirmará e o conjunto de instruções a seguir: I1: addi $2, $zero, 1 I2: bne $2,$zero, I7 I3: sub $3, $2, $1 I4: sw $2, 50($1) I5: add $2, $3, $3 I6: sub $2, $2, $4 I7: lw $4, 0 ($1) Quantos são gastos para a execução deste código?
Exercício 6: (solução) Considere uma CPU usando uma estrutura pipeline com 5 estágios (IF, ID, EX, MEM, WB) e com memórias de dados e de instruções separadas, com mecanismo de data forwarding, com previsão estática de que o desvio não se confirmará e o conjunto de instruções a seguir: I1: addi $2, $zero, 1 I2: bne $2,$zero, I7 I3: sub $3, $2, $1 I4: sw $2, 50($1) I5: add $2, $3, $3 I6: sub $2, $2, $4 I7: lw $4, 0 ($1) Quantos são gastos para a execução deste código? ilustração de solução em pipelining 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 I1: addi $2, $zero, 1 I D X M W I2: bne $2, $zero, I7 I D X M W I3: sub $3, $2, $1 I D X F F I4: sw $2, 50($1) I D F F F I5: add $2, $3, $3 I F F F F I7: lw $4, 0 ($1) I D X M W Previsão errada obriga processador a anular (flush) instruções executadas erroneamente Zera os sinais de controle relativos às instruções executadas erroneamente Tem-se que fazer isto para instruções que estão nos estágios IF, ID e EX o Branch só é corretamente avaliado depois de EX
MIPS code for D=A+B; E=A+C; # Method 1: 13 ciclos lw $t1, 0($t0) lw $t2, 4($t0) add $t3, $t1, $t2 <-- RAW ($t2) sw $t3, 12($t0) lw $t4, 8($t0) add $t5, $t1, $t4 <-- RAW ($t4) sw $t5, 16($t0) Code Scheduling to Avoid Stalls # Method 2: 11 ciclos lw $t1, 0($t0) lw $t2, 4($t0) lw $t4, 8($t0) add $t3, $t1, $t2 sw $t3, 12($t0) add $t5, $t1, $t4 sw $t5, 16($t0)