Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aprofundando o aprendizado Compreendendo pipelines por meio de desenhos 6.7 [5] <§6.2> Na página 298, mostramos um exemplo com a seguinte seqüência de código: lw $10, 20($1) sub $11, $2, $3 As Figuras 6.19 e 6.20 mostraram os diagramas de pipeline com múltiplos ciclos de clock para essa seqüência de duas instruções, executando por 6 ciclos de clock. As Figuras de 6.14.1 a 6.14.3 mostram os diagramas de pipeline de ciclo único de clock correspondentes para essas duas instru- ções. Observe que a ordem das instruções difere entre esses dois tipos de diagramas: a instruçãomais nova está na parte inferior direita do diagrama de pipeline com múltiplos ciclos de clock e está à es- querda no diagrama de pipeline com ciclo único de clock. Nos três exercícios a seguir, use a seguinte seqüência de código: add $4, $2, $3 sw $5, 4($2) Para a seqüência de código anterior, desenhe o diagrama de pipeline com múltiplos ciclos de clock usando o formato mostrado na Figura 6.19. 6.8 [5] <§6.2> Para a seqüência de código no Exercício 6.6, desenhe o diagrama de pipeline com múltiplos ciclos de clock usando o formato mostrado na Figura 6.20. 6.9 [15] <§6.2> Para a seqüência de código anterior, mostre o pipeline por 6 ciclos de clock usando os diagramas de ciclo único de clock, como nas Figuras de 6.14.1 a 6.14.3. A Figura 6.14.4 possui um diagrama de pipeline com ciclo único de clock em branco, que pode ser reproduzido para facilitar sua tarefa! Aprofundando o aprendizado 6-14-1 6-14-2 Aprofundando o aprendizado ELSEVIER Memória de instrução Endereço 4 3232 In st ru ct io n Add Add PC Registradores Read data 1 Read data 2 Read register 1 Read register 2 1616 Exten- são de sinal WrWriteite registerregister WrWriteite datadata Memória de instrução Endereço 4 3232 Add AddAdd resultresult Shift left 2 Shift left 2 In st r In st ru ct io n u ct io n PC WrWriteite datadata Registradores ReadRead data 1data 1 ReadRead data 2data 2 ReadRead register 1register 1 ReadRead register 2register 2 1616 WrWriteite registerregister WrWriteite datadata ReadRead datadata ALUALU resultresult ALU ZeroZero Add AddAdd resultresult ALUALU resultresult ALU ZeroZero Busca de instrBusca de instruçãoução EndereçoEndereço Memória de dados WrWriteite datadata ReadRead datadata AddressAddress Memória de dados M u x 00 11 M u x 0 1 M u x 0 1 M u x 11 00 M u x 11 00 M u x 00 11 IF/ID EX/MEMEX/MEM MEM/WBMEM/WBID/EX DecodificaçãoDecodificação de instrde instruçãoução lw $10, 20($1) Busca de instrBusca de instruçãoução sub $11, $2, $3 IF/ID EX/MEMEX/MEMID/EXID/EX lw $10, 20($1) Clock 1 Clock 2 MEM/WBMEM/WB Exten- são de sinal FIGURA 6.14.1 Diagramas de pipeline com ciclo único para os ciclos de clock 1 (diagrama superior) e 2 (diagrama inferior). Esse estilo de representação de pipeline é um instantâneo de cada instrução executando durante 1 ciclo de clock. Nosso exemplo tem tudo menos duas instruções, de modo que no máximo dois estágios são identificados em cada ciclo de clock; normalmente, todos os cinco estágios estão ocupados. As partes destacadas do caminho de dados estão ativas nesse ciclo de clock. O load é buscado no ciclo de clock 1 e decodificado no ciclo de clock 2, com o subtract buscado no segundo ciclo de clock. Para tornar as figuras mais fáceis de entender, os outros estágios do pipeline estão vazi- os, mas normalmente existe uma instrução em cada estágio do pipeline. Aprofundando o aprendizado 6-14-3 Memória de instrução EndereçoEndereço 4 3232 In st r In st ru ct io n u ct io n IF/IDIF/ID EX/MEM MEM/WB Add Add LerLer dados 1dados 1 LerLer dados 2dados 2 ReadRead registerregister 11 ReadRead registerregister 22 1616 WrWriteite registerregister EscreEscrevverer dadosdados ID/EX MemórMemóriaia lw $10, 20($1) ExExecuçãoecução sub $11, $2, $3 EndereçoEndereço 4 3232 Add Add result Shift left 2 Add AddAdd resultresult Shift left 2 In st ru ct io n IF/ID EX/MEM MEM/WB PC PC Escrever dados Ler dados 1 Ler dados 2 Read register 1 Read register 2 1616 WrWriteite registerregister EscreEscrevverer dadosdados Ler dados ALU result ALU ZeroZero ALU result ALU ZeroZero ID/EX Endereço Clock 3 Clock 4 M u x 0 1 M u x 00 11 M u x 00 11 M u x 11 00 M u x 11 00 M u x 00 11 DecodificaçãoDecodificação de instrde instruçãoução sub $11, $2, $3 ExExecuçãoecução lw $10, 20($1) Registradores Exten- são de sinal Memória de instrução Registradores Memória de dados Exten- são de sinal EscreEscrevverer dadosdados Ler dados Endereço Memória de dados FIGURA 6.14.2 Diagramas de pipeline com ciclo único para os ciclos de clock 3 (diagrama superior) e 4 (diagrama inferior). No terceiro ciclo de clock do diagrama superior, lw entra no estágio EX. Ao mesmo tempo, sub entra em ID. No quarto ciclo de clock (caminho de dados inferior), lw move-se para o estágio MEM, lendo a memória por meio do endereço encontrado em EX/MEM no início do ciclo de clock 4. Aomesmo tempo, a ALU subtrai e depois coloca a diferença no EX/MEM ao final do ciclo de clock. 6-14-4 Aprofundando o aprendizado ELSEVIER 4 3232 In st r In st ru ct io n u ct io n IF/ID EX/MEM MEM/WB Add Add Read register 1 Read register 2 1616 Write register ID/EX 4 3232 Add AddAdd resultresult Shift left 2 Shift left 2 In st ru ct io n IF/IDIF/ID EX/MEM MEM/WB 1616 ReadRead registerregister 11 ReadRead registerregister 22 Write register ALUALU resultresult ALU ZeroZero ALUALU resultresult ALU ZeroZero ID/EXID/EX Clock 5 Clock 6 M u x 00 11 M u x 00 11 M u x 0 1 M u x 11 00 M u x 0 1 M u x 00 11 MemórMemóriaia sub $11, $2, $3 EscrEscrita de vita de voltaolta lw $10, 20($1) EscrEscrita de vita de voltaolta sub $11, $2, $3 Add AddAdd resultresult PC PC Memória de instrução Endereço LerLer dados 1dados 1 LerLer dados 2dados 2 Escrever dados EndereçoEndereço EscreEscrevverer dadosdados LerLer dadosdados 11 LerLer dados 2dados 2 Escrever dados LerLer dadosdados EndereçoEndereço Registradores Exten- são de sinal Memória de instrução Registradores Memória de dados Exten- são de sinal EscreEscrevverer dadosdados LerLer dadosdados EndereçoEndereço Memória de dados FIGURA 6.14.3 Diagramas de pipeline de ciclo único para os ciclos de clock 5 (diagrama superior) e 6 (diagrama inferior). No ciclo de clock 5, lw completa escrevendo os dados de MEM/WB no registrador 10, e sub envia a diferença emEX/MEMparaMEM/WB.No próximo ciclo de clock, sub escreve o valor deMEM/WBno regis- trador 11. Rotulando diagramas de pipeline com controle 6.15 [20] <§6.3> Para entender como funciona o controle do pipeline, vamos considerar cinco ins- truções percorrendo o pipeline: lw $10, 20($1) sub $11, $2, $3 and $12, $4, $5 or $13, $6, $7 add $14, $8, $9 Mostre as instruções no pipeline que precedem o lw como before <1>, before <2>, ..., e as instru- ções após o add como after <1>, after <2>, ... As Figuras de 6.14.5 a 6.14.9 mostram essas instruções prosseguindo pelos nove ciclos de clock necessários para concluir a execução, destacando o que está ativo em um estágio e identificando a instrução associada a cada estágio durante um ciclo de clock. A análise cuidadosa dessas figuras dará idéia de como funcionam os pipelines. Alguns itens que você pode observar: ! Na Figura 6.14.7, você pode ver a seqüência dos números de registrador destino da esquerda para a direita na parte inferior dos registradores de pipeline. Os números prosseguem para a di- reita durante cada ciclo de clock, com o registrador de pipeline MEM/WB fornecendo o núme- ro do registrador escrito durante o estágio WB. ! Quando um estágio está inativo, os valores das linhas de controle que estão inativas aparecem como 0 ou X (para “don’t care”). ! Ao contrário do Capítulo 5, no qual a seqüência de controle exigia hardware especial, a seqüên- cia de controle está embutida na própria estrutura do pipeline. Primeiro, todas as instruções le-vam o mesmo número de ciclos de clock, de modo que não existe controle especial para a duração da instrução. Segundo, toda a informação de controle é computada durante a decodifi- cação da instrução, e depois passada pelos registradores de pipeline. Usando o mesmo formato da Figura 6.14.5 e começando com o diagrama de pipelining vazio da Figura 6.14.10, desenhe os diagramas de pipeline para a seqüência anterior, por um total de 4 ciclos de clock. Aprofundando o aprendizado 6-14-5 4 32 In st ru ct io n Add Read register 1 Read register 2 16 Write register ALU result ALU Zero M u x 0 1 M u x 0 1 M u x 0 1 Shift left 2 Add Add result PC IF/ID EX/MEM MEM/WBID/EX Clock Memória de instrução Endereço Ler dados 1 Ler dados 2 Escrever dados Registradores Exten- são de sinal Escrever dados Ler dados Endereço Memória de dados FIGURA 6.14.4 Um diagrama de pipeline com ciclo único de clock para uso na ilustração da execução do pipeline. 6-14-6 Aprofundando o aprendizado ELSEVIER InstrInstructiouctio nn [20[20––16]16] M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSr cc 4 InstrInstructiouctio nn [15[15––0]0] ControleControle ALUALU R eg W r R eg W rit eite MemReadMemRead ContrControlol InstrInstructiouctio nn [15[15––11]11] EXEX MM WBWB MM WBWB WBWB In st r In st ru ct io n u ct io n IF/ID EX/MEMID/E X ID: before<1> EX: before<2> MEM: before<3> WB: before<4> MEM/WB IF: lw $10, 20($1) 000000 0000 00000000 000000 0000 0000 00 00 0000 00 00 00 00 00 11 PC M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDsRegDs tt ALUSrALUSr cc 4 ALUALU resultresult ZeroZero R eg W r R eg W rit eite MM WBWB WBWB In st ru ct io n IF/ID ID: lw $10, 20($1) EX: before<1> MEM: before<2> WB: before<3> MEM/WB IF: sub $11, $2, $3 010010 1111 00010001 000000 0000 0000 00 00 0000 00 00 00 00 00 PC lw ContrControlol X 1 Instructio n [20–16] Instructio n [15–0] Instructio n [15–11] 20 $X $1 10 X M em W r M em W rit eite MemReadMemRead M em W r M em W rit eite Clock 2 Clock 1 M u x 0 1 M u x 00 11 M u x 11 00 M u x 00 11 M u x 0 1 M u x 00 11 M u x 00 11 M u x 00 Add Add Read register 1 Read register 2 WrWritit registerregister ee ReadRead registerregister 11 ReadRead registerregister 22 WrWrititee registerregister ALUALU resultresult ALU ZeroZero X 10 20 EX/ME MID/E X ALU Shift left2 Add AddAdd resultresult Shift left2 Add AddAdd resultresult WBWB EXEX MM Memória de instrução Endereço Ler dados 1 Ler dados 2 EscreEscrevverer dadosdados Endereço EscreEscrevverer dadosdados LerLer dadosdados 11 LerLer dados 2dados 2 EscreEscrevverer dadosdados LerLer dadosdadosEndereçoEndereço Registradores Exten- são de sinal Memória de instrução Registradores Memória de dados Exten- são de sinal EscreEscrevverer dadosdados LerLer dadosdados EndereçoEndereço Memória de dados ControleControle ALUALU FIGURA 6.14.5 Ciclos de clock 1 e 2. A frase “before <i>” significa a i-ésima instrução antes de lw. A instrução lw no caminho de dados superior está no estágio IF. Ao final do ciclo de clock, a instrução lw está nos registradores de pipeline IF/ID. No segundo ciclo de clock, visto no caminho de dados inferior, o lw passa para o estágio ID, e sub entra no estágio IF. Observe que os valores dos campos de instrução e os registradores de origem selecionados aparecem no estágio ID. Logo, o registrador $1 e a constante 20, os operandos de lw, são escritos no registrador de pipeline ID/EX. O número 10, re- presentando o número do registrador destino de lw, também é colocado em ID/EX. Os bits 15-11 são 0, mas usamos X para mostrar que um campo não desempenha uma função em determinada instrução. O topo do registrador de pipeline ID/EX mostra os valores de controle para lw a serem usados nos estágios restantes. Esses valores de controle podem ser lidos a partir da linha lw da tabela na Figura 6.25. Aprofundando o aprendizado 6-14-7 Instruction [20–16] M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSr cc 4 Instruction [15–0] Shift left 2R eg W r R eg W rit eite MemReadMemRead ContrControlol Instruction [15–11] EXEX MM WBWB MM WBWB WBWB In st ru çã o IF/ID EX/ME MID/E X ID: sub $11, $2, $3 EX: lw $10 , . . . MEM: before<1> WB: before<2> MEM/WB IF: and $12, $4, $5 000000 0000 00000000 010010 1111 0000 00 11 0000 00 00 00 00 00 11 PC M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSr cc 4 ZeroZero Shift left 2R eg W r R eg W rit eite WBWB WBWB In st ru çã o IF/ID ID: and $12, $4, $5 EX: sub $11 , . . . MEM: lw $10 , . . . WB: before<1> MEM/WB IF: or $13, $6, $7 000000 1010 11001100 000000 1010 1010 11 00 1111 11 00 00 00 00 PC and ContrControlol 5 4 Instruction [20–16] Instruction [15–0] Instruction [15–11] X $5 $4 $3 $2 X 20 10 12 10 11 M em W r M em W rit eite MemReadMemRead M em W r M em W rit eite Clock 4 Clock 3 M u x 0 1 M u x 0 11 M u x 11 00 M u x 00 1 M u x 0 1 M u x 0 1 M u x 0 1 M u x 00 Add Add Read register 1 Read register 2 Write register Read register 1 Read register 2 WrWriteite registerregister Add AddAdd resulresultt ALU result ALU ZeroZero Add AddAdd resultresult 12 X X EX/ME MID/E X ALU result ALU 2 3 $2 $1 $3 X X 11 X X 11 MM WBWB EXEX MM ContrControleole ALUALU Memória de instrução Endereço Ler dados 1 Ler dados 2 Escrever dados Endereço EscreEscrevverer dadosdados Ler dados 1 Ler dados 2 EscreEscrevverer dadosdados LerLer dadosdadosEndereçoEndereço Registradores Exten- são de sinal Memória de instrução Registradores Memória dedados Exten- são de sinal EscreEscrevverer dadosdados Ler dados Endereço Memória de dados ContrControleole ALUALU FIGURA 6.14.6 Ciclos de clock 3 e 4. No diagrama superior, lw entra no estágio EX no terceiro ciclo de clock, so- mando $1 e 20 para formar o endereço no registrador de pipeline EX/MEM. (A instrução lw é escrita como lw $10,... ao al- cançar EX, pois a identidade dos operandos da instrução não é necessária para EX ou para os estágios subseqüentes. Nessa versão do pipeline, as ações de EX, MEM eWB dependem apenas da instrução e seu registrador destino ou seu endereço de destino.) Ao mesmo tempo, sub entra em ID, lendo os registradores $2 e $3, e a instrução and inicia IF. No quarto ciclo de clock (caminho de dados inferior), lw se move para o estágio MEM, lendo a memória por meio do valor em EX/MEM como endereço. No mesmo ciclo de clock, a ALU subtrai $3 de $2 e coloca a diferença em EX/MEM, and lê os registrado- res $4 e $5 durante ID, e a instrução or entra em IF. Os dois diagramasmostram os sinais de controle sendo criados no está- gio ID e removidos conforme são utilizados nos estágios de pipe subseqüentes. 6-14-8 Aprofundando o aprendizado ELSEVIER Instruction [20–16] M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSr cc 4 Instruction [15–0] Shift left2R eg W r R eg W rit eite MemReadMemRead ContrControlol Instruction [15–11] EXEX MM WBWB MM WBWB WBWB In st ru çã o IF/ID or EX/MEMID/E X ID: or $13, $6, $7 EX: and $12 , . . . MEM: sub $11 , . . . WB: lw $10, . . . MEM/WB IF: add $14, $8, $9 000000 1010 11001100 000000 1010 1010 11 00 1010 00 00 00 11 11 1 PC M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSr cc 4 ALU ZeroZero Shift left2R eg W r R eg W rit eite MM WBWB WBWB In st ru çã o IF/ID ID: add $14, $8, $9 EX: or $13 , . . . MEM: and $12 , . . . WB: sub $11, . . . MEM/WB IF: after<1> 000000 1010 11001100 000000 1010 1010 11 00 1010 00 00 00 11 00 PC add ContrControlol 9 11 8 Instruction [20–16] Instruction [15–0] Instruction [15–11] X $9 $8 $7 $6 X 11 10 14 12 11 13 M em W rM em W rit eite MemReadMemRead M em W r M em W rit eite Clock 6 Clock 5 M u x 00 11 M u x 0 11 M u x 11 0 M u x 00 1 M u x 0 1 M u x 0 11 M u x 0 1 M u x 00 Add Add Read register 1 Read register 2 Write register Read register 1 Read register 2 Write register Add AddAdd resulresultt ALU result ALU ZeroZero Add AddAdd resultresult 12 X X EX/MEMID/E X result ALU 6 7 10 $6 $4 $5$7 X X 13 X X 13 12 WBWB EXEX MM ContrControleole ALUALU Memória de instrução EndereçoEndereço Ler dados 1 Ler dados 2 Escrever dados Endereço EscreEscrevverer dadosdados Ler dados 1 Ler dados 2 Escrever dados LerLer dadosdados EndereçoEndereço Registradores Exten- são de sinal Memória de instrução Registradores Memória de dados Exten- são de sinal EscreEscrevverer dadosdados LerLer dadosdados EndereçoEndereço Memória de dados ContrControleole ALUALU FIGURA 6.14.7 Ciclos de clock 5 e 6. Com add, a instrução final neste exemplo, entrando em IF no caminho superi- or, todas as instruções estão ocupadas. Escrevendo os dados de MEM/WB no registrador 10, lw termina; os dados e o nú- mero do registrador estão emMEM/WB. No mesmo ciclo de clock, sub envia a diferença em EX/MEM para MEM/WB, e o restante das instruções se move para a frente. No ciclo de clock seguinte, sub seleciona o valor emMEM/WB para escre- ver no registrador número 11, novamente encontrado em MEM/WB. As instruções restantes brincam de siga-o-líder: a ALU calcula o OR de $6 e $7 para a instrução or no estágio EX, e os registradores $8 e $9 são lidos no estágio ID para a ins- trução add. As instruções após add aparecem como inativas, só para enfatizar o que ocorre para as cinco instruções no exemplo. A frase “after<i>” significa a i-ésima instrução após add. Aprofundando o aprendizado 6-14-9 InstrInstructionuction [20–16][20–16] M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrcALUSrc 4 InstrInstructionuction [15–0][15–0] Shift left 2R eg W r R eg W rit eite MemReadMemRead ContrControlol InstrInstructionuction [15–11][15–11] EXEX MM WBWB MM WBWB WBWB IF/ID EX/MEMID/E X ID: after<1> EX: add $14 , . . . MEM: or $13 , . . . WB: and $12, . . . MEM/WB IF: after<2> 000000 1010 11001100 000000 1010 1010 11 00 1010 00 00 00 11 00 0 PC M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrcALUSrc 4 ALU result Shift left2R eg W r R eg W rit eite MM WBWB WBWB IF/ID ID: after<2> EX: after<1> MEM: and $14 , . . . WB: or $13, . . . MEM/WB IF: after<3> 000000 0000 00000000 000000 0000 0000 00 00 1010 00 00 00 11 00 PC ContrControlol 13 InstrInstructionuction [20–16][20–16] InstrInstructionuction [15–0][15–0] InstrInstructionuction [15–11][15–11] 14 13 M em W r M em W rit eite MemReadMemRead M em W r M em W rit eite Clock 8 Clock 7 M u x 00 11 M u x 00 11 M u x 11 0 M u x 00 11 M u x 00 11 M u x 0 1 M u x 00 11 M u x 1 Add Add Read register 1 Read register 2 Write register Read register 1 Read register 2 Write register Add AddAdd resultresult ALU result ALU ZeroZero Add AddAdd resultresult EX/MEMID/E X ALU ZeroZero 12 $8 $9 14 13 12 WBWB EXEX MM In st ru çã o In st ru çã o Con-Con- trtroleole ALUALU Memória de instrução Endereço Ler dados 1 Ler dados 2 Escrever dados EndereçoEndereço EscreEscrevverer dadosdados LerLer dadosdados 11 LerLer dados 2dados 2 Escrever dados LerLer dadosdadosEndereçoEndereço Registradores Exten- são de sinal Memória de instrução Registradores Memória de dados Exten- são de sinal EscreEscrevverer dadosdados LerLer dadosdados EndereçoEndereço Memória de dados ContrControleole ALUALU FIGURA 6.14.8 Ciclos de clock 7 e 8. No caminho de dados superior, a instrução add expõe o que há por trás, so- mando os valores correspondentes aos registradores $8 e $9 durante o estágio EX. O resultado da instrução or é passado de EX/MEM para MEM/WB no estágio MEM, e o estágio WB escreve o resultado da instrução and emMEM/WB para o re- gistrador $12. Observe que os sinais de controle estão inativos (em 0) no estágio ID, pois nenhuma instrução está sendo executada. No ciclo de clock seguinte (desenho inferior), o estágioWB escreve o resultado no registrador $13, completan- do assim o or, e o estágio MEM passa a soma do add em EX/MEM para MEM/WB. As instruções após o add aparecem como inativas por questões pedagógicas. 6-14-10 Aprofundando o aprendizado ELSEVIER WBWB EXEX MM M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSrcc 4 ZeroZero Shift left 2R eg W r R eg W rit eite MM WBWB WBWB In st r In st ru çã o u çã o IF/ID ID: after<3> EX: after<2> MEM: after<1> WB: add $14, . . . MEM/WB IF: after<4> 000000 0000 00000000 000000 1010 0000 00 00 1010 00 00 00 11 00 PC ContrControlol 14 InstrInstructionuction [20–16][20–16] InstrInstructionuction [15–0][15–0] InstrInstructionuction [15–11][15–11] 14 MemReadMemRead M em W r M em W rit eite Clock 9 M u x 00 11 M u x 00 11 M u x 1 0 M u x 00 11 Add Read register 1 Read register 2 Write register Add AddAdd resultresult EX/MEMID/EX ALUALU resultresult ALU ContrControleole ALUALU EndereçoEndereço EscreEscrevverer dadosdados LerLer dadosdados 11 LerLer dados 2dados 2 Escrever dados LerLer dadosdados EndereçoEndereço Memória de instrução Registradores Memória de dados Exten- são de sinal FIGURA 6.14.9 Ciclo de clock 9. O estágio WB escreve a soma que se encontra emMEM/WB no registrador $14, completando o add e a seqüência de cinco instruções. As instruções após add aparecem como inativas por questões pe- dagógicas. M em to R eg M em to R eg ALUOpALUOp BrBranchanch RegDstRegDst ALUSrALUSrcc 4 ShiftShift leftleft 22R eg W r R eg W rit eite MM WBWB WBWB IF/ID ID: EX: MEM: WB: MEM/WB IF: 000000 0000 00000000 000000 1010 0000 00 00 0000 00 00 00 00 00 PC ContrControlol InstrInstructionuction [20–16][20–16] InstrInstructionuction [15–0][15–0] InstrInstructionuction [15–11][15–11] MemReadMemRead M em W r M em W rit eite Clock M u x 00 11 MM uu xx 00 11 MM uu xx 11 00 MM uu xx 00 11 Add ReadRead register 1register 1 ReadRead register 2register 2 WrWriteite registerregister AdAddd AddAdd resultresult EX/MEMID/EX ALUALU resultresult ALUALU ZeroZero WBWB EXEX MM In st r In st r u çã o u çã o Con-Con- trtroleole ALUALU Endereço EscreEscrevverer dadosdados LerLer dadosdados 11 LerLer dados 2dados 2 EscreEscrevverer dadosdados LerLer dadosdados EndereçoEndereçoMemória deinstrução RegistradoresRegistradores Memória deMemória de dadosdados Exten- são de sinal FIGURA 6.14.10 Um diagrama de pipeline com ciclo único de clock em branco, com controle. Ilustrando pipelines com forwarding 6.16 [20] <§6.4> Podemos usar os diagramas de pipeline de ciclo único de clock para mostrar como funciona o forwarding, e também como o controle ativa os caminhos de forwarding. Considere a seqüência de código a seguir, em que as dependências foram destacadas: sub $2, $1, $3 and $4, $2, $5 or $4, $4, $2 add $9, $4, $2 As Figuras 6.14.11 e 6.14.12 mostram os eventos nos ciclos de clock 3-6 da execução dessas ins- truções. No ciclo de clock 4, a unidade de forwarding vê a escrita da instrução sub do registrador $2 no estágio MEM, enquanto a instrução and no estágio EX está lendo o registrador $2. A unidade de forwarding seleciona o registrador de pipeline EX/MEM no lugar do registrador de pipeline ID/EX como entrada superior para a ALU, a fim de obter o valor apropriado para o registrador $2. A instru- ção or a seguir lê o registrador $4, que é escrito pela instrução and, e o registrador $2, escrito pela ins- trução sub. Assim, no ciclo de clock 5, a unidade de forwarding seleciona o registrador de pipeline EX/MEM para a entrada superior da ALU e o registrador de pipeline MEM/WB para a entrada infe-rior da ALU. A instrução add a seguir lê o registrador $4, o destino da instrução and, e o registrador $2, que a instrução sub já escreveu. Observe que as duas instruções anteriores escrevem o registrador $4, de modo que a unidade de forwarding precisa selecionar o registrador imediatamente anterior (estágioMEM). No ciclo de clock 6, a unidade de forwarding seleciona assim o registrador de pipeli- ne EX/MEM, contendo o resultado da instrução or, para a entrada superior da ALU, mas usa o valor, que não é de forwarding, do registrador para a entrada inferior da ALU. Usando o diagrama vazio da Figura 6.14.13 e o formato da Figura 6.14.11, desenhe os diagramas de pipeline com ciclo único de clock para os ciclos de 3 a 5 durante a execução desta seqüência: add $1, $1, $3 add $4, $2, $1 and $5, $4, $1 Ilustrando pipelines com forwarding e stalls 6.24 [20] <§6.5> Podemos usar os diagramas de pipeline com ciclo único de clock para mostrar como funciona o controle de stalls. As Figuras de 6.14.14 a 6.14.16 mostram o diagrama de ciclo único para os clocks de 2 a 7 para a seguinte seqüência de código (dependências destacadas). lw $2, 20($1) and $4, $2,$5 or $4, $4,$2 add $9, $4,$2 Usando o mesmo formato da Figura 6.14.15, ilustre a execução da seguinte seqüência para os ci- clos de clock de 3 a 6. Use a Figura 6.14.17 para fazer o exercício. lw $2, 20($1) add $4, $5, $2 sub $4, $4, $2 Aprofundando o aprendizado 6-14-11 6-14-12 Aprofundando o aprendizado ELSEVIER FIGURA 6.14.11 Ciclos de clock 3 e 4 da seqüência de instruções no Exercício 6.16. As linhas mais es- pessas são aquelas ativas em um ciclo de clock, e os números de registradores em itálico e destaque indicam um hazard. A unidade de forwarding é destacada sombreando-a quando estiver realizando forwarding de dados para a ALU. As ins- truções antes de sub aparecem como inativas só para enfatizar o que ocorre com as quatro instruções no exemplo. Os no- mes de operando são usados em EX para o controle do forwarding; assim, eles estão incluídos no rótulo da instrução para EX. Os nomes de operando não são necessários emMEM ouWB, de modo que ... é utilizado. Compare isso com as Figuras de 6.14.6 a 6.14.9, mostrando o caminho de dados sem forwarding, onde ID é o último estágio a precisar de in- formações do operando. Aprofundando o aprendizado 6-14-13 FIGURA 6.14.12 Ciclos de clock 5 e 6 da seqüência de instruções no Exercício 6.16. A unidade de for- warding é destacada quando está realizando forwarding de dados para a ALU. As duas instruções após add aparecem como inativas só para enfatizar o que ocorre para as quatro instruções no exemplo. As linhas em negrito são aquelas ativas em um ciclo de clock, e os números de registrador em itálico e coloridos indicam um hazard. 6-14-14 Aprofundando o aprendizado ELSEVIER FIGURA 6.14.13 Diagrama de pipeline em branco com caminhos de dados de forwarding. Aprofundando o aprendizado 6-14-15 FIGURA 6.14.14 Ciclos de clock 2 e 3 da seqüência de instruções no Exercício 6.24 com um load substi- tuindo sub. As linhas em negrito são aquelas ativas em um ciclo de clock, os números de registrador em itálico e em des- taque indicam um hazard, e ... no lugar dos operandos significa que sua identidade é informação não necessária por esse es- tágio. Os valores significativos das linhas de controle, registradores e números de registradores são rotulados nas figuras. A instrução and deseja ler o valor criado pela instrução lw no ciclo de clock 3, de modo que a unidade de detecção de hazard faz um stall nas instruções and e or. Em virtude disto, a unidade de detecção de hazard está destacada. 6-14-16 Aprofundando o aprendizado ELSEVIER FIGURA 6.14.15 Ciclos de clock 4 e 5 da seqüência de instruções no Exercício 6.24 com um load substi- tuindo sub. Abolha é inserida no pipeline no ciclo de clock 4, e depois a instrução and tem permissão para prosseguir no ciclo de clock 5. A unidade de forwarding é destacada no ciclo de clock 5 porque está realizando forwarding de dados de lw para a ALU. Observe que, no ciclo de clock 4, a unidade de forwarding realiza um forwarding do endereço do lw como se fosse o conteúdo do registrador $2; isso se torna inofensivo pela inserção da bolha. As linhas mais espessas são aquelas ati- vas em um ciclo de clock, e os números de registrador em itálico e destaque indicam um hazard. Aprofundando o aprendizado 6-14-17 FIGURA 6.14.16 Ciclos de clock 6 e 7 da seqüência de instruções no Exercício 6.24 com um load substi- tuindo sub. Observe que, diferente da Figura 6.14.12, o stall permite que o lw termine, e, por isso, não existe forwarding deMEM/WB no ciclo de clock 6. O registrador $4 para o add no estágio EX ainda depende do resultado de or no EX/MEM, de modo que a unidade de forwarding passa o resultado para a ALU. As linhas em negrito mostram as linhas de entrada da ALU ativas em um ciclo de clock, e os números de registrador em itálico indicam um hazard. As instruções após o add apa- recem como inativas por questões pedagógicas. Exercícios diversos 6.5 [5] <§6.1> Como poderíamos modificar o código a seguir para utilizar um delay slot? Loop: lw $2, 100($3) addi $3, $3, 4 beq $3, $4, Loop 6.10 [5] <§6.2> Para cada registrador de pipeline na Figura 6.22, rotule cada parte do registrador de pipeline com o nome do valor carregado no registrador. Determine a extensão de cada campo em bits. Por exemplo, o registrador de pipeline IF/ID contém dois campos, um deles sendo um campo de instrução que possui 32 bits de largura. 6.11 [15] <§§3.6, 6.2> Usando a Figura 3.13 como base, descubra uma estrutura de caminho de da- dos em pipeline razoável para a adição de ponto flutuante, e integre os registradores de ponto flutu- ante e a memória de dados à sua figura para produzir uma figura semelhante à Figura 6.11, exceto que seu diagrama também deve conter um pipeline alternativo para instruções de adição de ponto flutuante. Não se preocupe muito com os atrasos associados a cada uma das funções na Figura 3.13. Você deverá simplesmente assumir que a soma dos atrasos émuito grande e, por isso, exige que você use 2 ou 3 ciclos para realizar a adição de ponto flutuante. A adição deverá ser mantida em pipeline, de modo que uma nova instrução de adição de ponto flutuante possa ser iniciada a cada ciclo, supon- do que não haja dependências (você pode ignorar as dependências para esse problema). 6.20 [20] <§§6.4, 6.5> Considere uma seqüência de instruções utilizada para uma cópia da memó- ria para a memória: lw $2, 100($5) sw $2, 200($6) A Seção de “Detalhamento” da página 310 do texto discute essa situação e indica que o hardware de forwarding adicional pode melhorar seu desempenho. Mostre os acréscimos necessários ao cami- nho de dados da Figura 6.33 para permitir que um código como esse seja executado sem stalls. Inclua 6-14-18 Aprofundando o aprendizado ELSEVIER FIGURA 6.14.17 Diagrama de pipeline em branco com hardware de stall. equações de forwarding (como aquelas que aparecem nas páginas 306-310) para todos os sinais de controle para quaisquer multiplexadores novos ou modificados no seu caminho de dados. Finalmen- te, reescreva a fórmula de stall da página 311 demodo que essa seqüência de código não gere stall. 6.25 [20] <§6.5> A unidade de forwarding poderia ser movida para o estágio de ID e as decisões de forwarding poderiam ser feitas mais cedo. Os resultados dessas decisões precisariam ser passados adiante com a instrução e utilizados no estágio EX quando o forwarding real ocorresse. Essa modifi- cação agilizaria o estágio EX e poderia permitir uma possível melhoria no tempo do ciclo. Realize a modificação. Ofereça um caminho de dados revisado e uma descrição das mudanças necessárias. Como o registrador ID/EX mudou? Ofereça novas equações de forwarding para substituir as que aparecem nas páginas 306-310. 6.26 [15] <§§6.2–6.5> Nos exercícios do Capítulo 5, exploramos as implicações de ter instruções load e store sem deslocamento. Como essa modificação no conjunto deinstruções afetaria uma im- plementação em pipeline? Descreva as mudanças no caminho de dados e o impacto sobre o desem- penho. Não se esqueça de incluir uma discussão sobre forwarding na sua resposta. 6.27 [10] <§§6.2–6.5> A ISA 80x86 possui instruções aritméticas que podem acessar a memória diretamente. Escreva um ou dois parágrafos explicando por que seria difícil incluir essa instrução no pipelineMIPS descrito neste capítulo. (Dica: você pode ter de incluir um oumais estágios adicionais no pipeline.) 6.28 [30] <§6.5, Apêndice C>Usando o Apêndice C e a resposta do Exercício 6.23, projete o hard- ware para implementar a unidade de forwarding. (Dica: para decidir se os números de registrador são iguais, tente usar uma porta OR exclusiva. Veja a Seção de “Detalhamento” na página B-36 do Apêndice B.) 6.31 [10] <§6.6> Uma extensão do conjunto de instruções MIPS possui duas novas instruções, chamadas movn (move if not zero) e movz (move if zero). Por exemplo, a instrução movn $8, $11, $4 copia o conteúdo do registrador 11 para o registrador 8, desde que o valor no registrador 4 não seja zero (caso contrário, ela não faz nada). A instrução movz é semelhante, mas a cópia ocorre somente se o valor do registrador for zero.Mostre como usar as novas instruções para colocar o que for maior, o valor do registrador 8 ou o valor do registrador 9, no registrador 10. Se os valores forem iguais, co- pie qualquer um para o registrador 10. Você pode usar o registrador 1 como um registrador extra para uso temporário. Não use quaisquer desvios condicionais. 6.32 [10] <§6.6> A solução para o Exercício 6.31 deverá envolver a execução de menos instruções do que seriam necessárias usando desvios condicionais. No entanto, às vezes, a reescrita do código para usar movn e movz em vez de desvios condicionais não reduz o número de instruções executa- das. Apesar disso, mesmo que o uso de movn e movz não reduza o número de instruções executadas, isso ainda pode tornar o programa mais rápido se estiver sendo executado em um caminho de dados em pipeline. Explique por quê. Aprofundando o aprendizado 6-14-19
Compartilhar