660 likes | 891 Views
Escalação Dinâmica Algorítmo de Tomasulo. Revisão: Três Partes do Scoreboard. 1.Status da instrução — em qual dos 4 passos a instrução se encontra 2. Status da unidade funcional — indica o estado da unidade funcional (FU), através dos campos: Busy — indica se a unidade está ocupada ou não
E N D
Revisão: Três Partes do Scoreboard 1.Status da instrução— em qual dos 4 passos a instrução se encontra 2. Status da unidade funcional— indica o estado da unidade funcional (FU), através dos campos: Busy — indica se a unidade está ocupada ou não Op — operação a ser realizada pela unidade (ex., + ou –) Fi — registrador de destino Fj, Fk — número dos registradores fonte Qj, Qk — unidades funcionais produzindo dados para Fj, Fk Rj, Rk — Flags indicando se Fj, Fk estão prontos 3. Status do registrador destino— Indica qual unidade funcional irá escrever em cada registrador.
Exemplo de Scoreboard Ciclo 3 Emite MULT? Não, espera emissão do segundo LD
Exemplo de Scoreboard Ciclo 9 • Lê operandos para MULT & SUBD? Emite ADDD?
Exemplo de Scoreboard Ciclo 17 Escreve resultado de ADDD? Não, perigo WAR
Exemplo de Scoreboard Ciclo 62 • Emissão em ordem; Leitura e execução fora de ordem; escrita fora de ordem, respeitando WAR
Scoreboard - Sumário • Limitações do scoreboard do CDC 6600 • Sem antecipação (primeiro escreve no registrador, depois lê) para RAW • Limitado a instruções num bloco básico (pequena janela) • Número limitado de unidades funcionais (conflito estrutural) • Espera pela dependência WAR para escrita • Previne a dependência WAW na emissão
Um outro Algoritmo para Escalação Dinâmica: Algorítmo de Tomasulo • Usado no IBM 360/91 por volta de 3 anos após CDC 6600 (1966) • Alto Desempenho sem compiladores especiais • Porquê estudar? Devido ao uso no Alpha 21264, HP 8000, MIPS 10000, Pentium II, PowerPC 604, …
Algoritmo Tomasulo • Controle & buffers distribuídos nas unidades funcionais (UFs) • Buffers de UFs chamados estações de reserva (reservation station- RS), contem operandos pendentes
Algoritmo Tomasulo • Operandos após serem processados pelas UFs são difundidos diretamente para todas as RSs que esperam dados, pelo CDB (Common Data Bus) (no scoreboard os resultados eram escritos nos registradores para depois serem lidos) • Loads e Stores tratados como UFs com RSs • Instruções de inteiros podem ser executadas após desvios (branches) UFs para Loads e Stores
Renomeação de Registradores • Registradores são renomeados nas estações de reserva • Evita conflitos WAR, WAW DIV.D F0, F2, F4 ADD.D F6, F0, F8 S.D F6, 0(R1) SUB.D F8, F10, F14 MUL.D F6, F10, F8 RENOMEAÇÃO: DIV.D F0, F2, F4 ADD.D S, F0, F8 S.D S, 0(R1) SUB.D T, F10, F14 MUL.D F6, F10, T
Componentes da Estação de Reserva Op—operação na unidade (ex., add ou sub) Vj, Vk—valores dos operandos fonte • Os buffers de armazenamento (store) tem um campo do dado a ser armazenado e um campo de endereço • Os buffers de carga (load) tem apenas um campo de endereço Qj, Qk— unidades funcionais/estação de reserva produzindo os valores dos registradores fonte • Os buffers de armazenamento tem somente Qi para indicar a unidade funcional/estação de reserva produzindo o dado Busy—indica se a estação de reserva está ocupada Status de resultado do registrador— Indica qual unidade funcional irá escrever em cada registrador.
Os Três Estágios do Algoritmo de Tomasulo 1.Emissão — a instrução da fila de instruções é emitida com os nomes dos operandos renomeados, se tiver estação de reserva disponível 2. Execução— realiza a execução da operação (EX) se ambos os operandos estão prontos; senão, aguarda o Bus de Dados Comum pelo resultado 3. Escrita do resultado— conclui a instrução (WB) • escreve no Bus de Dados Comum para que todas as unidades à espera possam ler o resultado: Bus de Dados Normal: dado + destino (“go to” bus) Bus de Dados Comum: dado + fonte (“come from” bus) • 64 bits de dados + 4 bits de endereço fonte da Unidade Funcional • marca a estação de reserva da instrução concluída como disponível
LD – 2 ciclos SUBD – 2 ciclos ADDD – 2 ciclos MULT – 10 ciclos DIVD – 40 ciclos Ex: Tomasulo Ciclo 0
Ex: Tomasulo Ciclo 2 Nota: pode ter múltiplos loads em operação
Ex: Tomasulo Ciclo 3 • Os nomes dos registradores são removidos (“renomeados”) nas estações de reserva; MULT emitido • Load1 completando:quem está esperando pelo Load1?
Ex: Tomasulo Ciclo 4 • Load2 completando: quem espera por F2?
Ex: Tomasulo Ciclo 6 • Emite ADDD
Ex: Tomasulo Ciclo 7 • Add1 completando: quem espera pelo resultado?
Ex: Tomasulo Ciclo 10 • Add2 completando: quem espera pelo resultado?
Ex: Tomasulo Ciclo 11 • Escreve resultado de ADDD
Ex: Tomasulo Ciclo 12 • Todas as instruções rápidas já completadas
Ex: Tomasulo Ciclo 15 • Mult1 completando: quem espera pelo resultado?
Ex: Tomasulo Ciclo 16 • Falta apenas a divisão
Ex: Tomasulo Ciclo 56 • Mult 2 completando: quem espera pelo resultado?
Ex: Tomasulo Ciclo 57 • Emissão em ordem, execução e finalização fora de ordem
Comparação com Scoreboard Ciclo 62 • Porque scoreboard é mais demorado?
Tomasulo v. Scoreboard(IBM 360/91 v. CDC 6600) (6 load, 3 store, 3 +, 2 x/÷) (1 load/store, 1 + , 2 x, 1 ÷) tamanho da janela: 14 instruções 5 instruções Sem emissão no conflito estrutural idem WAR: por renomeação pára a escrita WAW: por renomeação pára a emissão Difunde resultados de UFs write/read de registradores Controle: estações de reserva scoreboard
Desvantagens do Tomasulo • Complexidade • Muitos armazenamentos associativos (Bus de Dados Comum) a alta velocidade • Desempenho limitado pelo Bus de Dados Comum
Exemplo de Loop em Tomasulo Loop: LD F0 0 R1 MULTD F4 F0 F2 SD F4 0 R1 SUBI R1 R1 #8 BNEZ R1 Loop • Assumir que Multiplicação leva 4 clocks • Assumir que o primeiro load leva 8 clocks (miss no cache), o segundo load leva 4 clocks (hit no cache) e store leva 4 clocks. • Para ser claro, serão mostrados clocks para SUBI e BNEZ
Loop Ciclo 4 Execução de SUBI
Loop Ciclo 5 Execução de BNEZ
Loop Ciclo 6 • F0 não vê resultado de Load1
Loop Ciclo 9 • Load1 completando: quem espera o resultado?
Loop Ciclo 10 • Load2 completando: quem espera o resultado?