400 likes | 504 Views
MIPS avançado Escalação Dinâmica. MIPS64 com instruções de inteiros e de pontos flutuantes. Instruções de ponto flutuante. LS F5, 0(R1) – load FP simples (32 bits) LD F6, 0(R1) - load FP duplo (64 bits) SS F6, 0(R1) – store FP simples
E N D
Instruções de ponto flutuante LS F5, 0(R1) – load FP simples (32 bits) LD F6, 0(R1) - load FP duplo (64 bits) SS F6, 0(R1) – store FP simples SD F6, 0(R1) – store FP duplo ADDD F6, F10, F8 – adição de F10 e F8 com resultado em F6 DIVD F0, F2, F4 - divisão de F2 por F4 com resultado em F0 MULD F6, F10, F8 – multiplicação de F10 com F8 com resultado em F6 SUBD F6, F10, F8 – subtração de F10 com F8 com resultado em F6 Registradores do MIPS64 32 registradores de uso geral de 64 bits, R0,...,R31, registradores inteiros. 32 registradores de ponto flutuante, F0, ..., F31, que podem ter dados de precisão simples (32 bits) e dados de precisão dupla (64 bits). Observação: no livro, LS = L.S, LD= L.D, ADDD = ADD.D, etc.
Situações de dependência que levam a: RAW – Read After Write – ler depois de escrever WAR – Write After Read – escrever depois de ler WAW – Write After Write – escrever depois de escrever quando se pensa em execução fora de ordem. Exemplos: DIVD F0, F2, F4 ADDD F6, F0, F8 SD F6, 0(R1) SUBD F8,F10, F14 MULD F6, F10, F8 RAW - Dependência entre DIVD e ADDD – no uso de F0 WAR - Antidependência entre ADDD e SUBD - no uso de F8 WAW - Dependência de saída entre ADDD e MULD ( ADDD pode terminar depois de MULD)
Escalaçao Dinâmicausando scoreboard (placar) semelhante aousado no CDC6600
A função do scoreboard é controlar a execução de instruções, e todos os fluxos de dados entre os registradores e as unidades funcionais scoreboard
Escalação Dinâmica: Estrutura do MIPS com Placar (scoreboard) Duas unidades de Multiplicação FP Uma unidade de Divisão FP Uma unidade de Adição FP Uma unidade de inteiros
1 .Estágio de Emissão • Se uma unidade funcional estiver livre e nenhuma instrução ativa tem o mesmo registrador destino, o scoreboard emite a instrução para a unidade funcional e atualiza a estrutura de dados interna. Esse passo substitui uma porção do passo ID(Instruction Decode) no MIPS pipeline. • Assegurando que nenhuma instrução ativa tem o mesmo registrador destino, garante-se que WAW seja resolvido. • Se um conflito estrutural ou WAW existe, então, a emissão da instrução pára e nenhuma instrução posterior é emitida até que o conflito seja resolvido. • Quando o estágio de emissão pára, causa o preenchimento do buffer entre IF(Instruction Fetch) e o estágio de emissão. Se o buffer é de única entrada, IF pára imediatamente. Se o buffer é uma fila com múltiplas instruções, IF pára após a fila ficar cheia.
2. Leitura de operandos • O scoreboard monitora a disponibilidade dos operandos fonte. Um operando fonte é disponível se nenhuma instrução anterior ativa irá sobrescrevê-lo. • Quando os operandos fonte são disponíveis, o scoreboard diz à unidade funcional para realizar a leitura dos operandos nos registradores e iniciar a execução. • O scoreboard resolve assim RAW dinamicamente nesse passo, e instruções podem ser enviados para execução fora de ordem. • Este passo junto com o anterior (emissão) completa a função do passo ID no pipeline MIPS simples.
3. Execução • A unidade funcional inicia a execução ao receber os operandos. • Quando o resultado estiver pronto, a unidade notifica o scoreboard que a execução foi realizada. • Este passo substitui o EX no pipeline MIPS e toma vários ciclos no caso da unidade de ponto flutuante.
4. Escrita do resultado (finalização) • Uma vez que o scoreboard é avisado de que a execução foi realizada, o scoreboard verifica se existe violação de WAR e pára a finalização da instrução caso necessário. • O perigo de violação de WAR existe num caso como: DIVD F0, F2, F4 ADDD F10, F0, F8 SUBD F8, F8, F14 onde ADDD depende de F8, que será alterado por SUBD. • Nesse caso, o scoreboard irá parar SUBD no seu estágio de finalização até que ADDD faça a leitura dos seus operandos. • Se o perigo de violação de WAR não existe, ou for eliminado, o scoreboard diz à unidade funcional para escrever o resultado no registrador de destino. • Esse passo substitui o WB no pipeline MIPS.
PARTES DO SCOREBOARD1- Status da Instrução Indica em qual dos quatro passos a instrução se encontra. Instrução emissão leitura Ex.completa Result.escrito LD F6,34(R2) v v v v LD F2,45(R3) v v v MULD F0,F2,F4 v SUBD F8,F6,F2 v DIVD F10,F0,F6 v ADDD F6,F8,F2 v
Partes do Scoreboard2. Status da unidade funcional Indica o estado da unidade funcional. Existem nove campos para cada unidade funcional: • Busy – indica se a unidade está ocupada • Op – operação a realizar na unidade (P.ex: add, sub) • Fi – registrador de destino • Fj, Fk – número dos registradores fonte • Qj, Qk – unidades funcionais produzindo os valores para fontes Fj, Fk. • Rj, Rk – flags indicando que Fj, Fk estão prontos.
Exemplo de Status da unidade funcional Unid. Busy op Fi Fj Fk Qj Qk Rj Rk Func. Int yes load F2 R3 No Mult1 yes mult F0 F2 F4 int No yes Mult2 no Add yes sub F8 F6 F2 int yes no Divide yes div F10 F0 F6 Mult1 No yes dest fontes un.func. Flags de pronto
Partes do Scoreboard3. Status dos registradores • Indica qual unidade funcional escreve em cada registrador, se uma instrução ativa tem o registrador como destino. • O campo fica em branco quando não existe nenhuma instrução pendente que escreva no registrador. Regs. F0 F2 F4 F6 F8 F10 F12 ..... F30 Mult1 int Add Divide Unid. Func.
Tempo de execução LD – 1 ciclo SUBD – 2 ciclos MULTD - 10 ciclos DIVD – 40 ciclos ADDD – 2 ciclos Exemplo
ciclo 2 (não, conflito estrutural) • Issue 2nd LD?
ciclo 3 • Issue MULT? (não, emissão fora de ordem)
ciclo 7 • Read multiply operands? (F2 não disponível)
ciclo 9 • Read operands for MULT & SUBD? • Issue ADDD? (sim) (não, unidade Add ocupada)
ciclo 12 • Read operands for DIVD? (F0 não disponível)
ciclo 17 • Write result of ADDD? (não, WAR de F6 para read em DIVD)
Resumo • Idéias chaves do scoreboard • Estágio ID verifica o conflito estrutural • Emissão em ordem, respeitando WAW • Espera dos operandos fora de ordem, respeitando RAW • Execução e término fora de ordem • Escrita do resultado fora de ordem, respeitando WAR