A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Arquitectura de Computadores 2004/05

Apresentações semelhantes


Apresentação em tema: "Arquitectura de Computadores 2004/05"— Transcrição da apresentação:

1 Arquitectura de Computadores 2004/05
LU1 Enunciado Admita um processador em pipeline semelhante ao MIPS, mas com 4 andares de execução, como se indica na figura a seguir. ID BR EX2 ME1 EX3 ME2 IF EX1 EX4 WB 23-mar-17 Arquitectura de Computadores 2004/05

2 Arquitectura de Computadores 2004/05
LU1 Enunciado (cont.) Admita ainda que existe forwarding total para as instruções que não necessitam de 4 ciclos de execução, e que as instruções que nos vão interessar neste problema exigem os seguinte número de ciclos de execução: Multiplicação em vírgula flutuante – 4 ciclos Adição em vírgula flutuante – 2 ciclos Operação com inteiros – 1 ciclo Admita ainda que existe um “branch delay slot”, que não existe latência entre as operações com inteiros e as operações de branch que delas dependem, e que a latência para os pares de instruções (Load-Utilizador do Load) é de 2 ciclos --- por outras palavras, o número de delay slots para os Loads é igual a 2. Pretende-se fazer correr o seguinte código neste pipeline, que calcula o produto interno de dois arrays de números em vírgula flutuante com 32 bits. 23-mar-17 Arquitectura de Computadores 2004/05

3 Arquitectura de Computadores 2004/05
LU1 Enunciado (cont.) Prod: L.D F5,0(R1) ; carrega elem. do primeiro array L.D F6,0(R2) ; carrega elem. do segundo array MUL.S F7,F5,F ; multiplica os elementos ADD.S F4,F4,F ; acumula resultado em F4 ADDI R1,R1, ; incrementa ponteiro ADDI R2,R2, ; incrementa ponteiro ADDI R3,R3,-1 BNE R3,R0,Prod ; fecha o ciclo NOP ; branch delay slot Admita que R1 e R2 contêm os endereços iniciais dos arrays, e que F4 foi inicializado a 0. 1. Quantos ciclos dura a execução de uma iteração, se não alterar o código? 23-mar-17 Arquitectura de Computadores 2004/05

4 Arquitectura de Computadores 2004/05
LU1 Enunciado (cont.) 2. Modifique o código, por forma a obter o menor número possível de ciclos de execução. Não desdobre os ciclos (isto é, não faça “loop unrolling”). Mostre o código que resulta desse escalonamento. Quantos ciclos dura agora a execução de uma iteração? 3. Faça agora um único desdobramento do ciclo. Faça o escalonamento por forma a eliminar completamente os stalls. Escreva o código resultante. Quantos ciclos dura agora a execução de uma iteração? 4. Se desdobrar o ciclo 8 vezes, quantos ciclos por iteração se conseguem? Nota: não precisa de escrever o código que resulta do desdobramento, nas precisa de justificar a sua resposta. 23-mar-17 Arquitectura de Computadores 2004/05

5 MI1 [adaptado de AQA3e – 3.16, pág. 294]
Resolução 1. 14 ciclos: 9 das instruções, mais 2 stalls antes dos MUL.S, e ainda 3 stalls antes do ADD.S Prod: L.D F5,0(R1) ; carrega elem. do primeiro array L.D F6,0(R2) ; carrega elem. do segundo array NOP MUL.S F7,F5,F ; multiplica os elementos ADD.S F4,F4,F ; acumula resultado em F4 ADDI R1,R1, ; incrementa ponteiro ADDI R2,R2, ; incrementa ponteiro ADDI R3,R3,-1 BNE R3,R0,Prod ; fecha o ciclo NOP ; branch delay slot RAW - 2 ciclos L.D-Utilizador RAW - 4 ciclos de execução do MUL.S WB no 4º ciclo leitura de F7 no mesmo ciclo pelo ADD.S 23-mar-17 Arquitectura de Computadores 2004/05

6 Arquitectura de Computadores 2004/05
LU1 Resolução (cont.) 2. 9 ciclos/iteração: 8 das instruções, mais 1 stall antes do BNE. ADD.S no branch delay slot Prod: L.D F5,0(R1) ; carrega elem. do primeiro array L.D F6,0(R2) ; carrega elem. do segundo array ADDI R1,R1, ; incrementa ponteiro ADDI R2,R2, ; incrementa ponteiro MUL.S F7,F5,F6 ADDI R3,R3,-1 NOP BNE R3,R0,Prod ADD.S F4,F4,F ; no branch delay slot 2 ciclos L.D-Utilizador 4 ciclos de execução do MUL.S Prod: L.D F5,0(R1) L:D F6,0(R2) NOP MUL.S F7,F5,F6 ADD.S F4,F4,F7 ADDI R1,R1,4 ADDI R2,R2,4 ADDI R3,R3,-1 BNE R3,R0,Prod 23-mar-17 Arquitectura de Computadores 2004/05

7 LU1 Resolução (cont.) 3. 12 instruções, sem stalls em 2 iterações  6 ciclos/iteração Prod: L.D F5,0(R1) ; carrega elem. do primeiro array L.D F6,0(R2) ; carrega elem. do segundo array L.D F8,4(R1) ; carrega outro elem. do prim. array L.D F9,4(R2) ; carrega outro elem. do segundo array MUL.S F7,F5,F6 ADDI R1,R1, ; incrementa ponteiro MUL.S F10,F8,F9 ADDI R2,R2, ; incrementa ponteiro ADD.S F4,F4,F ; acumula resultado em F4 ADDI R3,R3,-2 BNE R3,R0,Prod ; fecha o ciclo ADD.S F4,F4,F ; acumula resultado em F4 23-mar-17 23-mar-17 Arquitectura de Computadores 2004/05 Arquitectura de Computadores 2004/05 Exercício MI1 - 7

8 Arquitectura de Computadores 2004/05
LU1 Resolução 4. Uma iteração possui 4 instruções efectivas (não contando com o overhead do ciclo): duas L.D, uma MUL.S e uma ADD.S. O overhead é constituído por 4 instruções (três ADDI e um BNE), que se podem distribuir pelas 8 iterações. Temos, portanto, 4*8+4 = 36 ciclos/8 iterações ou 4,5 ciclos/iteração. 23-mar-17 Arquitectura de Computadores 2004/05


Carregar ppt "Arquitectura de Computadores 2004/05"

Apresentações semelhantes


Anúncios Google