Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tópico 8: Microarquitetura (Multicycle) Prof. Jhonattan Cordoba Ramirez Escola de Engenharia Universidade Federal de Minas Gerais (UFMG) ELT123 - Arquitetura e Organização de Computadores Introdução • Desvantagens dos processadores de ciclo único: • Em primeiro lugar, requer um ciclo de relógio longo o suficiente para suportar a instrução mais lenta (lw), embora a maioria das instruções sejam mais rápidos. • Exige três somadores (um na ALU e dois na lógica de PC); os somadores são circuitos relativamente caros, especialmente se eles devem ser rápidos. • Tem memórias de instrução e de dados separadas, o que pode não ser realista. A maioria dos computadores tem uma única memória grande que mantém as instruções e os dados e que podem ser lidas e escritas. Introdução • Solução por parte do processador multi-ciclo: • Distribuir uma instrução em vários passos mais curtos. Em cada passo, o processador pode ler ou escrever na memoria de dados ou no registro, após o uso da ALU. • O Processador requer: • Um somador reutilizável. • Memoria de instrução e memoria de dados juntas. Processo do projeto Caminho de dados Controle Memoria de dados Registros Unidade Lógica e Aritméticas (ALU) Multiplexadores MIPS – 32 bits Caminho de dados – 32 bits A unidade de controle recebe a instrução atual a partir do caminho de dados e informa ao caminho de dados como executar essa instrução. Especificamente, a unidade de controle produz os sinais de seleção do multiplexador, enable dos registros, e escrita da memória para controlar o funcionamento do caminho de dados. Elementos de estado Estado arquitetural (Contador de programa e registro) Memorias Memoria de instrução / Memoria de dados RegistroPC Microarquitetura multi-ciclo Instrução de memoria é lida e armazenada em um novo registrador de instrução não arquitetural. IRWrite, controla procedimentos para atualização do registro atual. Microarquitetura multi-ciclo Microarquitetura multi-ciclo Microarquitetura multi-ciclo Adicionamos um multiplexador em frente da memória para escolher o endereço de memória, seja a partir do PC ou do ALUOut. O sinal de seleção do multiplexador é chamado IorD, para indicar se o parâmetro de entrada é um endereço de instrução ou um endereço de dados. Os dados lidos a partir da memória são armazenados em outro registro não arquitetural, chamado Data. Microarquitetura multi-ciclo • Armazenamento dos dados carregados da memoria no registrador sinalizado. • Na instrução lw, registro rt, é registrador destino. Microarquitetura multi-ciclo Incremento no contador do programa, poupando a adição de um somador dentro do caminho de dados. Microarquitetura multi-ciclo • Na implementação do sw, o caminho de dados sofre algumas alterações. • Registro rt, é lido pelo sw como registrador de origem. Microarquitetura multi-ciclo • Instruções tipo R: Leitura de dois registros, executa operação da ALU e o resultado é armazenado em um outro registrador. Microarquitetura multi-ciclo • Branch beq: Offset indica numero de instruções para o branch passar. PCBranch = PC+4+(SignImm*4) Microarquitetura multi-ciclo Microarquitetura multi-ciclo Controle multi-ciclo Determina os sinais de controle com base nos campos opcode e funct. Decodificador principal opcode31:26 MemtoReg IorD PCSrc ALUSrcB1:0 ALUSrcA RegDst Decodificador do ALU funct05:00 ALUop01:00 ALUControl02:00 MemtoWrite RegWrite Branch IRWrite PCWrite Controle do registro Seleção dos multiplexers Controle multi-ciclo (lw e sw) IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 0 IRWrite PCWrite Reset S0: Buscar IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 0 IRWrite PCWrite Reset S0: Buscar S1: DecodificarS1: Decodificar ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória Op = lw ou Op = sw Op = lw ou Op = sw IorD = 1 S3: Leitura na Memoria Op = lw IorD = 1 S3: Leitura na Memoria Op = lw RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador IorD = 1 MemtoWrite S5: Escrita na Memória IorD = 1 MemtoWrite S5: Escrita na Memória Op = sw Op = sw IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 0 IRWrite PCWrite Reset S0: Buscar S1: Decodificar ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador IorD = 1 MemtoWrite S5: Escrita na Memória IorD = 1 S3: Leitura na Memoria Controle multi-ciclo (Tipo R) ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 S6: Executar Op = Tipo R ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 S6: Executar Op = Tipo R RegDst = 1 MemtoReg = 0 RegWrite S7: Escrita no Registrador RegDst = 1 MemtoReg = 0 RegWrite S7: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCSrc = 1 Branch S8: Branch Op = beq ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCSrc = 1 Branch S8: Branch Op = beq Controle multi-ciclo (beq) IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 0 IRWrite PCWrite Reset S0: Buscar S1: Decodificar ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador IorD = 1 MemtoWrite S5: Escrita na Memória IorD = 1 S3: Leitura na Memoria RegDst = 1 MemtoReg = 0 RegWrite S7: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 S6: Executar Op = Tipo R ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 0 IRWrite PCWrite Reset S0: Buscar S1: Decodificar ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador IorD = 1 MemtoWrite S5: Escrita na Memória IorD = 1 S3: Leitura na Memoria RegDst = 1 MemtoReg = 0 RegWrite S7: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 S6: Executar Op = Tipo R ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCSrc = 1 Branch S8: Branch Op = beq Controle multi-ciclo (addi) RegDst = 0 MemtoReg = 0 RegWrite S10: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S9: Executar addi Op = addi ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S9: Executar addi Op = addi RegDst = 0 MemtoReg = 0 RegWrite S10: Escrita no Registrador Controle multi-ciclo (Tipo j) Controle multi-ciclo (Tipo j) IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 00 IRWrite PCWrite Reset S0: Buscar S1: Decodificar ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador IorD = 1 MemtoWrite S5: Escrita na Memória IorD = 1 S3: Leitura na Memoria RegDst = 1 MemtoReg = 0 RegWrite S7: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 S6: Executar Op = Tipo R ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCSrc = 01 Branch S8: Branch Op = beq RegDst = 0 MemtoReg = 0 RegWrite S10: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S9: Executar addi Op = addi PCSrc = 10 PCWrite S11: Jump Op = j Microarquitetura multi-ciclo EXEMPLO: O benchmark SPECint2000 consiste em aproximadamente 25% cargas, 10% armazenamentos, 11% branchs, 2% jumps, e 52% de instruções do tipo-R. Determine o CPI médio para este benchmark. 𝐶𝐶𝐶𝐶𝐶𝐶 = � � 0,11 + 0,02 3 + 0,52 + 0,10 4 + 0,25 5 IorD = 0 AluSrcA = 0 ALUSrcB = 01 ALUOp = 00 PCSrc = 00 IRWrite PCWrite Rese t S0: Buscar S1: Decodificar ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S2: Endereço de Memória RegDst = 0 MemtoReg = 1 RegWrite S4: Escrita no Registrador IorD = 1 MemtoWrite S5: Escrita na Memória IorD = 1 S3: Leitura na Memoria RegDst = 1 MemtoReg = 0 RegWrite S7: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 S6: Executar Op = Tipo R ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCSrc = 01 BranchS8: Branch Op = beq RegDst = 0 MemtoReg = 0 RegWrite S10: Escrita no Registrador ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 S9: Executar addi Op = addi PCSrc = 10 PCWrite S11: Jump Op = j Tc = tpcq + tmux … max tmem, tmux + tRFread , tmux + tALU , tmem + tRFsetup 𝐓𝐓𝐜𝐜 = 𝟑𝟑𝟑𝟑 + 𝟐𝟐𝟐𝟐 + 𝟐𝟐𝟐𝟐𝟑𝟑 + 𝟐𝟐𝟑𝟑 = 𝟑𝟑𝟐𝟐𝟐𝟐𝟑𝟑𝟑𝟑 Microarquitetura multi-ciclo EXEMPLO: Ben Bitdiddle está se perguntando se seria melhor ele construir o processador multi-ciclo em vez do processador de ciclo-único. Para ambos os projetos, ele planeja usar um processo de fabricação CMOS 65 nm com os atrasos apresentados na tabela do exercício anterior. Ajude a comparar o tempo de execução de cada processador para 100 bilhões de instruções da referência SPECint2000 Elemento Parâmetro Atraso (ps) Reg clk to Q tpcqpc 30 Multiplexer tmux 25 ALU tALU 200 Mem. read tmem 250 Reg. file read tRFread 150 Reg. file setup tRFsetup 20 EXEMPLO: Ben Bitdiddle está se perguntando se seria melhor ele construir o processador multi-ciclo em vez do processador de ciclo-único. Para ambos os projetos, ele planeja usar um processo de fabricação CMOS 65 nm com os atrasos apresentados na tabela do exercício anterior. Ajude a comparar o tempo de execução de cada processador para 100 bilhões de instruções da referência SPECint2000 Microarquitetura multi-ciclo Tempo de ciclo = 325 ps Texc = 100 × 109 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 4,12 𝑐𝑐𝑖𝑖𝑐𝑐𝑐𝑐𝑐𝑐 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑐𝑐 … 325 × 10−12𝑖𝑖𝑖𝑖𝑠𝑠 Tempo de execução = 133,9 seg Tópico 8: Microarquitetura (Multicycle) Slide Number 2 Slide Number 3 Slide Number 4 Slide Number 5 Slide Number 6 Slide Number 7 Slide Number 8 Slide Number 9 Slide Number 10 Slide Number 11 Slide Number 12 Slide Number 13 Slide Number 14 Slide Number 15 Slide Number 16 Slide Number 17 Slide Number 18 Slide Number 19 Slide Number 20 Slide Number 21 Slide Number 22 Slide Number 23 Slide Number 24 Slide Number 25 Slide Number 26
Compartilhar