Você está na página 1de 5

Arquitectura de Computadores II

3 Ano

Exerccios sobre Pipelining

Joo Lus Ferreira Sobral Departamento do Informtica Universidade do Minho

Maio 2003

Considere o modelo de uma arquitectura MIPS com o pipeline da figura em anexo, sem unidade de encaminhamento de dados (forward unit), sem unidade de deteco de anomalias (hazard detection unit), com a escrita dos valores em registos (write back) na primeira metade do ciclo, com empates (stall) do pipeline em instrues de salto e com cache "quente" e de dimenso infinita. Considere agora o seguinte programa em assembly MIPS:
mov $s1, $0 mov $s2, $0 mov $s0, -1024 soma: lw $t0, 0xC400($s0) addu $s1, $s1, $t0 sw $s1, 0xE400($s0) addu $s2, $s2, $s1 addiu $s0, $s0, +4 bne $s0, $0, soma mov $s1, $0

1) Identifique todas as dependncias de dados existentes neste programa e introduza instrues nop necessrias para que a execuo do programa esteja correcta. Calcule o CPI mnimo e o CPI efectivo na execuo deste programa neste processador. Comente os resultados.
Sugestes: a. Analise o significado e consequncia da no existncia das unidades de encaminhamento e de deteco de anomalias, bem como do facto de a operao de escrita dos valores em registo ser efectuada na 1 metade do ciclo, permitindo a leitura do contedo dos registos na 2 metade; com base neste conhecimento, possvel calcular quantas instrues devero estar entre 2 instrues com dependncias crticas de dados (que no caso deste MIPS so as de RAW). Analise o significado e consequncia do empate do pipeline em instrues de salto, i.e., da insero de bolhas aps a execuo de qualquer instruo de salto (absoluto e relativo), logo aps a sua descodificao; com base neste conhecimento, possvel calcular quantas bolhas so automaticamente inseridas por salto. Considere uma cache "quente" aquela que j contm toda a informao que o programa necessita para a sua execuo (neste caso o cdigo do programa e a rea dos dados); e se considerar ainda que ela tem dimenso infinita, ento tem a certeza que toda essa informao coube na cache, e que nenhum acesso cache de instrues ou de dados ser penalizado no funcionamento do pipeline. Conte o nmero de instrues x que so precisas executar para concluir o especificado. Supondo que o pipeline estar sempre ocupado com tarefas teis (modelo ptimo de arquitectura), verifique quantos ciclos de relgio so precisos para completar a execuo (dever dar mais 4 que o n de instrues, devido latncia de execuo da 1 instruo); com base nos clculos efectuados em d) pode-se obter o CPImin - que dever ser (x +4)/x. Identifique todas as dependncias de dados entre as instrues, e veja, instruo a instruo, quantas "bolhas" so inseridas, quer atravs da execuo de nops gerados pelo compilador para resoluo das dependncias de dados, quer ainda inseridas pela unidade de controlo de saltos no hardware; daqui pode contar e estimar o n total de ciclos de relgio para executar este programa; usando como n total de instrues a ser executadas no processador o valor x calculado em d. (que no o correcto; porqu?), calcule agora o CPI efectivo. 2 Joo Lus Sobral 2003

b.

c.

d. e.

f.

Arquitectura de Computadores II

2) Reordenando as instrues, rescreva o programa para minimizar o tempo de execuo; calcule o tempo de execuo do novo programa, em ciclos de relgio. Compare com o valor obtido em 1) e comente.
Sugesto: altere a ordem de execuo de instrues de modo a remover ao mximo as dependncias de dados; de notar que cada instruo que escreve num registo obriga insero de 2 nop caso a instruo que se lhe segue precise de ler o contedo desse registo; portanto, se se conseguir alterar a ordem de execuo de instrues de modo a existirem 2 instrues sem dependncia de dados aps uma operao que escreve num registo, a utilizao do pipeline melhorada; apenas com a simples reordenao de instrues deve conseguir eliminar pelo menos 3 instrues de nop (com um truque adicional - e que no compromete evolues da microarquitectura - poder ainda eliminar mais dois nop...).

3) Mostre o contedo do registo ID/EX no incio do 6 ciclo de relgio.


Sugesto: identifique primeiro qual a instruo que no 5 ciclo se encontra no nvel ID, sem se esquecer que na alnea anterior se conseguiu eliminar os nops no incio do programa; agora consulte os apontamentos para construir essa instruo em binrio e confirmar quais os sinais de controlo que a unidade de controlo gera nesse ciclo; o resto faz-se olhando apenas para a figura do pipeline em anexo.

4) Considere agora que o compilador usa a tcnica de desdobramento de ciclos (loop unroll) (para alm das melhorias introduzidas em 2)). Use-a para processar 4 elementos de cada vez, e reescreva o cdigo de modo a minimizar o tempo de execuo. Calcule o tempo de execuo do novo programa, em ciclos de relgio. Compare com o valor obtido em 2) e comente.
Sugesto: a. A tcnica de desdobramento de ciclos serve essencialmente 2 objectivos: minimizar as penalizaes resultantes das instrues de controlo de execuo do ciclo e espaar mais as instrues que obrigam insero de "bolhas" no pipeline devido a dependncias de dados. Identifique as penalizaes no funcionamento do pipeline resultantes das instrues de controlo de execuo do ciclo (sero s as instrues de salto?...). Reordene as instrues do novo corpo do ciclo - que processa agora 4x mais dados por cada iterao - usando, se necessrio, mais registos (e verificando se dispe do n extra de registos que so precisos) e modificando eventualmente o prprio cdigo do programa. Use estas dicas na reescrita do cdigo; se conseguir que cada instanciao do ciclo no tenha mais de 18 instrues teis e 2 nops, ento chegou a um resultado excelente!

b.

c.

5) Considere agora que a arquitectura possui uma unidade de encaminhamento de dados (forward unit) e uma unidade de deteco de anomalias (hazard detection unit). Modifique a soluo obtida em 1) e calcule o tempo de execuo do novo programa, em ciclos de relgio. Compare com os valores obtidos em 1) e 2) e comente.
Sugesto: lembre-se que a introduo da unidade de encaminhamento de dados vai permitir eliminar as bolhas nas dependncias de dados crticas que ocorrem aps a execuo de operaes aritmticas/lgicas; contudo, nas operaes de load continua a haver a necessidade de o compilador inserir um nop; mas, se a arquitectura possuir uma unidade de deteco de anomalias, a prpria unidade de controlo da arquitectura que se encarrega de introduzir uma bolha nesses casos de dependncia crtica de dados, simplificando a tarefa de gerao de cdigo do compilador (mas no melhorando o desempenho na execuo...)

Arquitectura de Computadores II

Joo Lus Sobral 2003

6) Se o valor de CPI obtido nos programas resultantes da resoluo de 4) e de 5) fossem iguais, que concluses tiraria quanto ao desempenho do processador na execuo deste programa? (Mesmo desempenho ou distinto, e porqu.)
Sugesto: lembre-se que a principal medida do desempenho do processador na execuo deste programa o tempo que ele necessita para o executar (em ciclos de relgio), e um bom tempo no depende apenas de uma boa "mquina" - o processador - mas tambm de um bom "condutor" - o cdigo gerado pelo compilador; com base nesta informao e na frmula que nos relaciona o tempo de execuo de um programa com os parmetros da arquitectura, pode responder questo...

7) Considere ainda a execuo atrasada da instruo de salto, i.e., a arquitectura introduz um slot de salto retardado (branch delay slot) (para alm dos melhoramentos j introduzidos na arquitectura em alneas anteriores). Reescreva o cdigo de modo a minimizar o tempo de execuo e calcule esse tempo, em ciclos de relgio. Compare com o valor mnimo obtido em 1) e a melhor optimizao que tinha conseguido em 5), e comente.
Sugesto: por execuo atrasada de uma instruo - de salto ou de load - entende-se que uma instruo s efectivamente executada aps a instruo que a segue; no caso da instruo de salto, isto significa que, quer o salto se concretize ou no, a instruo que se encontra na palavra seguinte da memria de instrues sempre carregada e executada; como consequncia para este processador, verifica-se que, em vez da arquitectura inserir 3 bolhas aps a descodificao de um branch (ou 1 bolha aps um jump), a unidade de controlo deixa executar a instruo que est imediatamente a seguir e apenas introduz 2 bolhas (no caso dum branch, e 0 no caso dum jump)

8) Considere ainda uma nova optimizao da arquitectura relativamente a 7): uma previso esttica de saltos - nunca salta. Reescreva o cdigo de modo a minimizar o tempo de execuo e calcule esse tempo, em ciclos de relgio.
Sugesto: mesmo com branch delay slot cada instruo de salto condicional pode ainda desperdiar 2 instrues (bolhas) quando a previso esttica falha; mas com saltos incondicionais isto j no acontece; estas dicas servem para alguma coisa?

9) Considere agora como alternativa a 8) uma previso dinmica de saltos (com 1 bit): se da vez anterior saltou, tambm salta agora e para o mesmo endereo, se no saltou, tambm no salta. Reescreva o cdigo de modo a minimizar o tempo de execuo e calcule esse tempo, em ciclos de relgio. Compare com o valor obtido em 8) e comente.

10) Considere agora, em adio a 9), uma arquitectura superescalar com trs unidades de execuo: i) execuo de acessos memria (load e store); ii) execuo de operaes aritmticas e iii) execuo de saltos. Qual o CPI mnimo terico e qual o CPI efectivamente obtido na execuo do programa? Comente os resultados. Qual a melhoria na execuo deste programa se for introduzida uma segunda unidade para execuo de operaes aritmticas, passando a arquitectura a possuir quatro unidades de execuo?

Arquitectura de Computadores II

Joo Lus Sobral 2003

PCSrc

ID/EX WB EX/MEM WB M MEM/WB WB Control EX M

0 M u x 1

IF/ID

Add Add Add result Shift left 2 ALUSrc Branch Mem Write

Instruction

Instruction memory Write d a ta 0 M u x 1

Read data 1 Read register 2 Registers Read Write data 2 register Zero ALU ALU result

Address Data memory Write data

Read data

Instruction 16 [15 0] 32 6 Sign extend

ALU control

MemRead

Instruction [20 16] Instruction [15 11]

0 M u x 1 RegDst

ALUOp

Arquitectura de Computadores II

Joo Lus Sobral 2002

MemtoReg 1 M u x 0

PC

Address

Read register 1

RegWrite