- Aprender
- Computação e TI
- Ciência da computação
- Organização e arquitetura de computadores
- Caminho de dados e pipeline
Caminho de dados do processador e segmentação em pipeline
IntermediárioAula 4 de 6 do curso Curso de Organização e arquitetura de computadores
O que você vai aprender
- Identificar as unidades de hardware necessárias a um processador RISC-V, conectá-las para que instruções aritméticas, de acesso à memória e de desvio terminem em um ciclo de clock e acompanhar instruções reais pelo caminho de dados resultante.
- Identificar os componentes de um caminho de dados e como são sincronizados pelo clockDistinguir elementos combinacionais de elementos de estado e descrever o que fazem o contador de programa, as memórias, o banco de registradores, a ULA, o gerador de imediatos, os somadores e os multiplexadores.
- Interligar o caminho de dados para instruções aritméticas, de acesso à memória e de desvioDeterminar quais unidades e conexões cada classe de instrução usa e reunir os caminhos separados em um único caminho de dados, com multiplexadores nos pontos de encontro.
- Acompanhar instruções pelo caminho de dados de ciclo únicoAcompanhar instruções concretas com valores reais de registradores e de memória por todas as unidades, informar os valores nos fios principais e indicar o que muda na borda de clock.
- Identificar os componentes de um caminho de dados e como são sincronizados pelo clock
- Determinar os sinais de controle que fazem o caminho de dados executar cada instrução, usando uma unidade de controle principal comandada pelo código de operação e uma pequena unidade de controle da ULA comandada pelos campos de função.
- Definir os sinais de controle principais para cada instruçãoExplicar o que faz cada sinal de controle principal, construir a tabela de controle para instruções do tipo R, de carga, de armazenamento e de desvio e usar corretamente valores indiferentes.
- Gerar o controle da ULA a partir de ALUOp e dos campos de funçãoUsar a decodificação em dois níveis para transformar o ALUOp de 2 bits e os campos funct7 e funct3 da instrução no código de 4 bits que seleciona a operação da ULA.
- Definir os sinais de controle principais para cada instrução
- Explicar como a sobreposição de instruções aumenta a vazão, descrever o caminho de dados em pipeline de cinco estágios com seus registradores e controle e acompanhar instruções com diagramas de pipeline.
- Explicar por que a segmentação em pipeline acelera um processadorDeterminar o período de clock de um projeto de ciclo único a partir do caminho crítico e calcular a vazão, a latência e a aceleração de uma versão em pipeline.
- Descrever o caminho de dados em pipeline de cinco estágios e seus registradores de pipelineExplicar o que os registradores de pipeline armazenam, como os sinais de controle acompanham cada instrução e por que toda instrução passa pelos cinco estágios.
- Acompanhar instruções com diagramas de pipelineDesenhar e ler diagramas de pipeline de múltiplos ciclos, identificar a instrução que está em cada estágio em um determinado ciclo e contar o total de ciclos com e sem paradas.
- Explicar por que a segmentação em pipeline acelera um processador
- Reconhecer quando instruções no pipeline entram em conflito e resolver conflitos de dados com encaminhamento, paradas e escalonamento de instruções.
- Identificar conflitos e as dependências de dados que os causamClassificar conflitos como estruturais, de dados ou de controle, identificar as dependências entre instruções e determinar quais causam paradas em um pipeline sem encaminhamento.
- Encaminhar resultados para evitar paradas do pipelineExplicar os caminhos de encaminhamento e as condições da unidade de encaminhamento e determinar de onde vem cada operando da ULA em uma dada sequência de instruções.
- Inserir paradas para conflitos de carga e uso e escalonar o código para evitá-losDetectar conflitos de carga e uso, explicar como o pipeline insere uma bolha e reordenar instruções para eliminar paradas sem alterar o resultado do programa.
- Identificar conflitos e as dependências de dados que os causam
- Reduzir o custo dos desvios com resolução antecipada, descarte de instruções e predição estática ou dinâmica e estimar como todos os conflitos afetam em conjunto o desempenho do pipeline.
- Reduzir o custo dos desvios no pipelineExplicar por que desvios causam conflitos de controle, comparar paradas, predição de desvio não tomado e resolução antecipada de desvios e tratar exceções como uma mudança relacionada no fluxo de controle.
- Prever desvios dinamicamente com base no históricoAcompanhar preditores de desvio de 1 bit e 2 bits, explicar a tabela de histórico de desvios e o buffer de destinos de desvios e reconhecer onde preditores simples falham.
- Estimar o desempenho do pipeline considerando conflitosCombinar paradas por carga e uso e penalidades de desvio em um CPI efetivo, calcular tempos de execução e comparar estratégias de tratamento de desvios e projetos de processadores.
- Reduzir o custo dos desvios no pipeline
Guia de estudo de Caminho de dados e pipeline
1Construir um caminho de dados de ciclo único
Um processador transforma bits de instrução em mudanças nos registradores, na memória e no endereço da próxima instrução. Acompanhe os componentes que realizam esse trabalho e depois conecte-os em caminhos para operações aritméticas, cargas, armazenamentos e desvios. Acompanhamentos concretos mostram os valores nos fios e as mudanças salvas em cada borda de clock. O projeto usa registradores RV64 e um pequeno conjunto de instruções RISC-V de 4 bytes, de modo que cada conexão tem uma função clara.
1.1 Identificar o hardware e o limite entre bordas de clock
Um caminho de dados armazena e transforma os valores de que uma instrução precisa. A unidade de controle direciona esses valores e habilita escritas. Juntos, eles executam instruções como add, sub, and, or, ld, sd e beq.
Acompanhe os valores entre bordas de clock
Um elemento de estado guarda um valor: o contador de programa, o banco de registradores e a memória de dados são exemplos. Um elemento combinacional produz uma saída a partir das entradas atuais. Somadores, multiplexadores, a ULA e o gerador de imediatos realizam esse trabalho sem armazenar o resultado de uma instrução entre ciclos.
Na borda ativa do clock, os elementos de estado capturam seus próximos valores. Entre bordas, suas saídas alimentam a lógica combinacional. O PC pode, portanto, fornecer o endereço atual durante todo um ciclo e capturar o próximo endereço ao final dele. Ler um elemento de estado não o sobrescreve por si só.
Busca e acesso aos registradores
O contador de programa (PC) armazena o endereço da instrução. A memória de instruções retorna a instrução de 32 bits nesse endereço. Neste modelo, ela é somente de leitura durante a execução do programa e funciona como uma consulta que associa endereços a instruções. Um somador separado forma PC + 4 porque as instruções desse subconjunto ocupam 4 bytes.
O banco de registradores contém x0–x31. Duas portas de leitura recebem os números de origem rs1 e rs2 e retornam os valores correspondentes. Uma porta de escrita recebe o destino rd, os dados de escrita e RegWrite. As leituras são combinacionais; uma escrita habilitada é salva na borda de clock. A leitura de x0 sempre retorna zero, e escritas nesse registrador são descartadas. Registradores RV64 armazenam 64 bits. Uma versão RV32 usa registradores de 32 bits e lw/sw, com as mesmas conexões básicas.
Calcule, selecione e acesse a memória
A unidade lógica e aritmética (ULA) soma, subtrai ou realiza uma operação bit a bit. Um código de controle de 4 bits seleciona a operação. A saída Zero da ULA vale 1 quando o resultado é zero; a subtração pode, portanto, testar se dois valores são iguais.
O gerador de imediatos, ImmGen, reconstrói o imediato de uma instrução e faz a extensão de sinal até 64 bits. Copiar o bit de sinal preserva um valor negativo. O padrão de 12 bits 1111 1111 1000 representa −8; a extensão com zeros o transformaria em 4088 e enviaria uma operação de memória ao endereço errado.
Um multiplexador, ou mux, seleciona uma entrada. Multiplexadores escolhem o segundo operando da ULA, os dados de escrita do registrador e o próximo PC. Um multiplexador muda o caminho; uma habilitação de escrita decide se um valor armazenado muda.
A memória de dados tem entradas de endereço e de dados de escrita, uma saída de dados de leitura e os controles MemRead e MemWrite. Uma carga precisa buscar a instrução e acessar dados durante o mesmo ciclo único. Memórias de instruções e de dados separadas fornecem os dois acessos. Somadores separados também permitem calcular PC + 4 e o destino do desvio enquanto a ULA realiza outro trabalho.
Saídas não usadas ainda podem mudar durante um ciclo. O controle correto garante que somente as saídas selecionadas cheguem a escritas habilitadas em elementos de estado. Um valor calculado em um fio não selecionado não tem efeito no programa.
Principais conclusões
- O caminho de dados processa valores; os sinais de controle selecionam caminhos e habilitam escritas.
- Elementos de estado mantêm valores entre bordas de clock; elementos combinacionais transformam as entradas atuais.
- O banco de registradores tem duas portas de leitura e uma de escrita, e a leitura de x0 sempre retorna zero.
- A extensão de sinal preserva o valor com sinal de um imediato.
- Memórias e somadores separados permitem realizar trabalhos necessários simultaneamente em um único ciclo.
1.2 Conectar os caminhos de cada classe de instrução
Comece pelo que cada instrução precisa ler e pelo que deve alterar. O caminho de dados compartilhado reúne essas rotas, com um multiplexador onde valores alternativos chegam a uma mesma entrada.
Busque e decodifique os campos
A busca usa o PC para ler a memória de instruções e calcula PC + 4 em paralelo. O código de operação ocupa os bits 6–0. Quando presentes, rd fica nos bits 11–7, funct3 em 14–12, rs1 em 19–15 e rs2 em 24–20; funct7 do tipo R ocupa os bits 31–25. Posições fixas dos campos de origem permitem que as leituras dos registradores comecem enquanto o controle da instrução é decodificado. Um armazenamento ou desvio não tem campo rd: os bits 11–7 compõem parte do imediato.
Compare os caminhos de execução
| Instrução | Entradas e ação da ULA | Memória de dados | Resultado salvo |
|---|---|---|---|
add x5, x6, x7 | x6 + x7 | Sem acesso | Soma em x5 |
ld x5, 16(x6) | x6 + 16 | Leitura no endereço efetivo | Dados da memória em x5 |
sd x5, 24(x6) | x6 + 24 | Escrita de x5 no endereço efetivo | Memória alterada |
beq x8, x9, offset | x8 − x9 | Sem acesso | Seleção do próximo PC |
Para uma carga, o resultado da ULA é um endereço efetivo, o endereço dos dados a ler. A saída da memória então retorna ao banco de registradores. Um armazenamento também forma um endereço com a ULA, mas seu segundo valor de origem segue separadamente para a entrada de dados de escrita da memória. Selecionar um imediato como operando da ULA não deve descartar esse valor a ser armazenado. ImmGen reconstrói o deslocamento do formato S a partir dos dois grupos de bits.
Um desvio realiza duas operações em paralelo. A ULA subtrai os valores dos registradores comparados; Zero indica se são iguais. O somador de desvio soma o deslocamento em bytes com sinal ao próprio PC do desvio. A codificação do formato B omite o bit menos significativo, que é sempre zero. ImmGen pode reconstruir o deslocamento completo em bytes, incluindo esse zero; um diagrama que gere o deslocamento em unidades de meia palavra precisa de um deslocamento de uma posição à esquerda. Esse deslocamento deve aparecer no caminho exatamente uma vez.
Una os caminhos com multiplexadores
ALUSrc seleciona o valor de rs2 ou o imediato para a segunda entrada da ULA. MemtoReg seleciona o resultado da ULA ou a saída da memória de dados para escrita no registrador. PCSrc seleciona PC + 4 ou o destino do desvio. Dois resultados concorrentes precisam de um seletor, não de um fio que ligue diretamente suas saídas.
Esses caminhos explicam por que a carga tem a cadeia mais longa: busca, leitura de registradores, cálculo de endereço, leitura da memória e escrita de registrador contribuem para ela. A operação aritmética não passa pela memória de dados; um armazenamento não passa pela escrita do resultado no registrador.
Amplie os caminhos existentes
addi x5, x6, 3 reutiliza o caminho da ULA com entrada imediata e o caminho de escrita do resultado da ULA no registrador. Ela precisa de controle adequado, mas de nenhuma nova unidade no caminho de dados. jal tem uma exigência adicional: escreve PC + 4 em rd enquanto redireciona o PC sem um teste de igualdade. Portanto, o seletor de escrita precisa de uma entrada PC + 4, e a lógica do próximo PC deve permitir um salto incondicional.
Principais conclusões
- Uma carga escreve dados da memória em rd; a saída da ULA é o endereço.
- Um armazenamento envia rs2 à memória enquanto a ULA soma a base e o deslocamento.
- Um desvio compara valores de registradores e calcula PC + deslocamento em paralelo.
- ALUSrc, MemtoReg e PCSrc selecionam caminhos compartilhados.
- A reconstrução do deslocamento em bytes do formato B inclui o bit zero implícito exatamente uma vez.
- A adição com imediato reutiliza o hardware existente; o salto com enlace também precisa de um caminho para escrever PC + 4 no registrador.
1.3 Acompanhar os valores e as mudanças de estado
O acompanhamento de uma instrução relaciona a operação em linguagem de montagem a valores reais nos fios. Separe os valores calculados durante o ciclo dos valores salvos na borda de clock ao final dele.
Use uma ordem consistente de acompanhamento
- Busque a partir do PC atual e identifique os campos da instrução.
- Leia os registradores de origem e forme o imediato com sinal.
- Selecione os operandos da ULA e calcule o resultado.
- Realize o acesso solicitado à memória de dados.
- Selecione os dados de escrita do registrador e o próximo PC.
- Liste as escritas nos elementos de estado na borda de clock.
Some dois valores de registradores
No PC 400, add x5, x6, x7 tem a codificação 0x007302B3. Seus campos são opcode 0110011, rd 5, funct3 000, rs1 6, rs2 7 e funct7 0000000. Com x6 = 25 e x7 = −9, as portas de leitura fornecem 25 e −9. ALUSrc seleciona o segundo valor de registrador, e a ULA produz 16. MemtoReg seleciona 16 para escrita no registrador. Na borda, x5 passa a valer 16 e o PC passa a valer 404. MemRead e MemWrite são ambos zero.
Carregue e depois armazene uma palavra dupla
No PC 404, considere ld x5, 16(x6) com x6 = 1000 e a memória em 1016 contendo 42. ImmGen fornece 16. A ULA calcula o endereço 1016, e a memória de dados retorna 42. MemtoReg seleciona esse valor da memória, então x5 passa a valer 42 e o PC passa a valer 408 na borda. Escrever 1016 em x5 confundiria o endereço com o valor armazenado nele.
No PC 408, sd x5, 24(x6) lê x5 = 42 e x6 = 1000. A ULA calcula 1024 enquanto o caminho de rs2 fornece 42 à memória. MemWrite habilita o armazenamento; RegWrite é zero. Na borda, a palavra dupla em 1024 passa a valer 42 e o PC passa a valer 412. O endereço de memória e o valor a armazenar percorrem fios diferentes.
Os deslocamentos são medidos em bytes. Palavras duplas RV64 adjacentes começam a 8 bytes de distância: após a palavra dupla em 1016, a próxima começa em 1024. Avançar um byte não chegaria à próxima palavra dupla.
Decida um desvio
No PC 412, beq x8, x9, 12 compara x8 = 7 com x9 = 7. A ULA subtrai e obtém zero. Branch é 1, então Branch AND Zero é 1 e PCSrc seleciona o destino do desvio. O somador de desvio produz 424 ao somar 12 a 412. Somente o PC muda.
Se x9 for 8, a subtração produzirá −1 e Zero será 0. O próximo PC será então 416. O deslocamento codificado está em unidades de 2 bytes, então a quantidade com sinal armazenada para esse deslocamento de 12 bytes é 6; o deslocamento completo usado pelo somador continua sendo 12.
Leia o estado para a próxima instrução
Cada instrução de ciclo único conclui seu trabalho entre bordas de clock consecutivas. A próxima instrução lê o estado salvo na borda anterior. Assim, o armazenamento pode ler o novo valor de x5 da carga no ciclo seguinte sem encaminhamento de pipeline. Cada instrução leva um ciclo de clock, resultando em um CPI de ciclo único igual a 1, independentemente do número de unidades de hardware usadas pelo caminho.
Principais conclusões
- Um acompanhamento fornece valores numéricos nos fios e identifica separadamente as mudanças de estado na borda de clock.
- Uma instrução aritmética escreve um resultado da ULA; uma carga escreve a saída da memória.
- Um armazenamento altera a memória e o PC, sem escrever no banco de registradores.
- Para beq, a igualdade seleciona o destino calculado a partir do PC do desvio.
2Projetar a unidade de controle do processador de ciclo único
O mesmo hardware pode somar dois registradores, calcular um endereço de memória ou comparar valores para um desvio. Os sinais de controle decidem qual ação importa em cada ciclo. Determine esses sinais a partir do trabalho que uma instrução deve realizar, incluindo as habilitações de escrita que protegem o estado armazenado. Depois, acompanhe os dois níveis de decodificação que transformam um código de operação e bits de função em uma operação específica da ULA e amplie o projeto para a adição com imediato.
2.1 Determinar a tabela de controle principal
A unidade de controle principal traduz um código de operação em sinais de seleção e permissões de escrita. Ela é uma tabela-verdade combinacional implementada com portas lógicas: controle por lógica fixa.
Atribua uma função a cada sinal
RegWrite habilita uma escrita em rd. ALUSrc seleciona a segunda entrada da ULA: 0 para rs2, 1 para um imediato. MemRead e MemWrite solicitam o acesso correspondente à memória de dados. MemtoReg seleciona os dados de escrita do registrador: 0 para o resultado da ULA, 1 para os dados da memória. Branch indica um desvio por igualdade. O ALUOp de 2 bits informa à unidade de controle da ULA, que é separada, qual classe de operação é necessária.
PCSrc é diferente: depende da instrução e dos valores comparados. O controle principal ativa Branch, e a ULA fornece Zero. A operação AND entre eles forma PCSrc, então um resultado aritmético comum igual a zero não pode, por si só, causar um desvio.
Construa a tabela a partir das ações necessárias
| Classe | ALUSrc | MemtoReg | RegWrite | MemRead | MemWrite | Branch | ALUOp |
|---|---|---|---|---|---|---|---|
| Tipo R | 0 | 0 | 1 | 0 | 0 | 0 | 10 |
ld | 1 | 1 | 1 | 1 | 0 | 0 | 00 |
sd | 1 | X | 0 | 0 | 1 | 0 | 00 |
beq | 0 | X | 0 | 0 | 0 | 1 | 01 |
Para ld, a ULA precisa de um deslocamento imediato, então ALUSrc é 1. Os dados carregados vão para rd, fazendo MemtoReg e RegWrite valerem 1. A memória é lida, não escrita, resultando em MemRead = 1 e MemWrite = 0. Branch é 0, e ALUOp = 00 solicita a adição para formar o endereço.
Para sd, a ULA também soma um deslocamento, mas o destino é a memória. Defina MemWrite = 1 e RegWrite = 0. MemRead permanece zero: usar a memória não significa lê-la. Para beq, a ULA usa os dois valores de registrador e subtrai, enquanto a única atualização possível do estado arquitetural é a do PC.
Use valores indiferentes apenas onde os resultados são ignorados
X é um valor indiferente, o que significa que qualquer valor de seleção produz o mesmo comportamento. MemtoReg pode ser X para um armazenamento ou desvio porque RegWrite é zero. A entrada de dados de escrita do banco de registradores é ignorada, então quem projeta pode escolher o valor de seleção que simplifica o circuito.
Uma habilitação de escrita em elemento de estado não pode ser tratada dessa forma quando a escrita é proibida. Um MemWrite acidental durante uma operação aritmética pode corromper a memória, embora a instrução aritmética não precise da saída dessa memória para outra finalidade. Portanto, RegWrite e MemWrite devem ser explicitamente zero para instruções que não realizam essas escritas.
Acrescente uma linha para aritmética com imediato
addi x5, x6, 3 obtém o segundo operando de ImmGen e escreve a soma da ULA. Sua linha é ALUSrc 1, MemtoReg 0, RegWrite 1, MemRead 0, MemWrite 0, Branch 0, ALUOp 00. O código de operação 0010011 é diferente do código 0110011 do tipo R, então o controle principal precisa dessa linha extra. O suporte a andi e ori também exige a decodificação dos valores de funct3 dessas instruções para selecionar a operação.
Os nomes dos sinais dependem do projeto. RegWEn, BSel e WBSel, em diagramas de outros cursos, descrevem funções relacionadas de habilitação de escrita e seleção de entrada. Ao ler um novo diagrama, acompanhe a definição de cada sinal e as entradas do multiplexador correspondente.
Principais conclusões
- O controle principal determina seleções de caminhos e habilitações de escrita a partir do código de operação.
- PCSrc combina Branch com o indicador Zero da ULA.
- Um armazenamento habilita MemWrite e desabilita RegWrite e MemRead.
- Um seletor só é indiferente quando o valor selecionado não pode afetar o comportamento.
- addi precisa de uma nova linha de código de operação, mas reutiliza o caminho de dados existente para adição com imediato.
2.2 Decodificar a operação da ULA em dois níveis
O código de operação sozinho não distingue add de sub: ambas pertencem à classe do tipo R. O controle em dois níveis primeiro identifica a classe e depois usa os bits de função quando necessário.
De ALUOp à operação
O controle principal fornece um ALUOp de 2 bits entre suas demais saídas. O controle da ULA combina ALUOp com funct3 e o bit 30 da instrução, parte de funct7, para produzir quatro bits de controle da operação.
| ALUOp | Informação adicional | Controle da ULA | Operação |
|---|---|---|---|
| 00 | Bits de função ignorados | 0010 | Adição |
| 01 | Bits de função ignorados | 0110 | Subtração |
| 10 | funct3 000, bit 30 = 0 | 0010 | Adição |
| 10 | funct3 000, bit 30 = 1 | 0110 | Subtração |
| 10 | funct3 111 | 0000 | AND |
| 10 | funct3 110 | 0001 | OR |
Esses códigos descrevem esta implementação da ULA, não codificações de instruções RISC-V. Cargas e armazenamentos usam ALUOp 00 porque somam uma base e um deslocamento. Desvios por igualdade usam ALUOp 01 porque a subtração produz Zero quando os operandos são iguais. Instruções do tipo R usam ALUOp 10 e precisam de mais decodificação.
Acompanhe uma subtração codificada
sub x5, x6, x7 tem a codificação 0x407302B3. O código de operação 0110011 identifica o tipo R e seleciona ALUOp 10. Seu funct3 é 000, o que deixa adição e subtração como possibilidades. O bit 30 é 1, de funct7 0100000, então o controle da ULA fornece 0110 para subtração.
Mudar esse bit de função para zero produz a codificação de adição correspondente 0x007302B3, com funct7 0000000 e controle da ULA 0010. A linha do controle principal permanece a mesma porque ambas as instruções usam duas entradas de registrador, escrevem um resultado da ULA e não acessam a memória de dados.
Reutilize o somador para subtração
Na ULA clássica, as linhas de controle representam Ainvert, Bnegate e um seletor de operação de 2 bits. A subtração usa o somador após inverter o segundo operando e fornecer um vai-um de entrada igual a 1:
Essa identidade de complemento de dois permite que adição e subtração compartilhem hardware. A diferença em Bnegate explica os códigos 0010 e 0110; ela não exige um caminho aritmético separado para cada instrução.
Decodifique os bits apenas no formato adequado
Para ALUOp 00 ou 01, as posições dos campos de função não selecionam a operação da ULA. O funct3 011 de uma carga descreve um acesso a uma palavra dupla. Os bits mais significativos de armazenamento e desvio incluem bits de imediato. Tratar essas posições como campos de função do tipo R confundiria a formação de endereços com a decodificação aritmética.
Para uma verificação rápida do tipo R, ALUOp 10 com funct3 110 seleciona 0001, a operação OR. Acrescentar outra operação sob o mesmo código de operação pode exigir apenas uma mudança no controle da ULA se ela já oferecer suporte à operação. Uma nova classe de instrução também pode exigir mudanças no controle principal, como ocorre com a aritmética com imediato.
Principais conclusões
- ALUOp seleciona uma classe de operação; os bits de função do tipo R completam a decodificação.
- ALUOp 00 solicita adição e 01 solicita subtração sem decodificação de função.
- Neste projeto, 0010 seleciona adição e 0110 seleciona subtração.
- O bit 30 distingue add de sub quando funct3 é 000.
- Os significados dos campos de função dependem do formato da instrução.
- A subtração em complemento de dois reutiliza a adição com o segundo operando invertido e vai-um de entrada igual a 1.
3Segmentar o caminho de dados em pipeline
Um período de clock longo em um processador de ciclo único deve acomodar uma carga mesmo quando a instrução atual exige menos trabalho. A segmentação em pipeline divide esse trabalho em estágios e sobrepõe instruções. Compare o período de clock, a vazão e a latência resultantes e acompanhe os dados e controles armazenados entre os estágios. Diagramas de pipeline tornam a sobreposição visível e oferecem uma maneira direta de contar o enchimento, a operação em regime e a conclusão de uma sequência curta de instruções.
3.1 Calcular período de clock, latência e vazão
Um processador de ciclo único deve terminar sua instrução mais lenta antes da próxima borda. Instruções mais rápidas ainda esperam pelo mesmo clock fixo. A segmentação em pipeline muda a quantidade de trabalho que cada período de clock deve conter.
Determine o limite do ciclo único
Use estes atrasos dos componentes, desconsiderando multiplexadores e pequenos somadores: busca 250 ps, leitura de registradores 150 ps, ULA 200 ps, memória de dados 250 ps e escrita de registrador 150 ps.
| Instrução | Atraso do caminho |
|---|---|
| Tipo R | 250 + 150 + 200 + 150 = 750 ps |
ld | 250 + 150 + 200 + 250 + 150 = 1000 ps |
sd | 250 + 150 + 200 + 250 = 850 ps |
beq | 250 + 150 + 200 = 600 ps |
A carga determina o caminho crítico, fixando o período em 1000 ps, ou 1 ns. Isso corresponde a um clock de 1 GHz. Uma distribuição de 25% de cargas, 10% de armazenamentos, 50% de instruções do tipo R e 15% de desvios tem um atraso ponderado de caminho de 800 ps. Mesmo assim, cada instrução recebe 1000 ps, o que equivale a 1,25 vez essa média. Um atraso médio não pode definir um clock que também deve acomodar a instrução mais longa.
Sobreponha cinco estágios
O pipeline divide a execução em IF (busca), ID (decodificação e leitura de registradores), EX (execução ou cálculo de endereço), MEM (acesso à memória de dados) e WB (escrita em um registrador). Instruções diferentes ocupam estágios diferentes simultaneamente.
A vazão conta as instruções concluídas por unidade de tempo. A latência mede o tempo que uma instrução leva da entrada até a conclusão. Uma linha de montagem pode concluir um item por intervalo mesmo que cada item precise de vários intervalos para percorrê-la. A mesma distinção se aplica aqui.
O estágio mais lento leva 250 ps. Com 20 ps de sobrecarga dos registradores de pipeline, o período de clock é de 270 ps, cerca de 3,70 GHz. Uma instrução percorre cinco períodos, levando 1350 ps. Isso supera sua latência no ciclo único, mas um pipeline cheio pode concluir uma instrução a cada 270 ps.
Inclua o tempo de enchimento e conclusão
Sem paradas, um pipeline de k estágios executa n instruções em k + n − 1 ciclos. Para cinco estágios, são n + 4. Quatro instruções precisam de oito ciclos, levando 2160 ps, em comparação com 4000 ps no processador de ciclo único. A aceleração é de cerca de 1,85.
Para 1.000.000 de instruções, o pipeline precisa de 1.000.004 ciclos, aproximadamente 270,0 μs. O projeto de ciclo único precisa de 1000 μs. A aceleração se aproxima da razão 1000/270, cerca de 3,70, à medida que o custo fixo de enchimento e esvaziamento se torna pequeno.
Uma aceleração perfeita de cinco vezes exigiria cinco estágios igualmente lentos de 200 ps, sem sobrecarga de registradores ou atrasos por conflitos. Estágios desiguais fazem os mais rápidos esperar pelo mais lento. Mais estágios também acrescentam sobrecarga e podem aumentar os custos dos conflitos.
Instruções fixas de 32 bits nesse subconjunto simplificam a busca. Campos de registrador em posições fixas ajudam ID, e a restrição do acesso à memória de dados a cargas e armazenamentos se ajusta ao cálculo de endereço em EX seguido por MEM. Essas propriedades da ISA tornam práticos os limites entre estágios.
Principais conclusões
- A instrução completa mais lenta determina o período de clock do ciclo único.
- O estágio mais lento somado à sobrecarga dos registradores determina o período do pipeline.
- A segmentação em pipeline aumenta a vazão; a latência de uma instrução pode aumentar.
- Uma sequência sem conflitos de n instruções em um pipeline de cinco estágios leva n + 4 ciclos.
- Estágios desiguais, sobrecarga de registradores, sequências curtas e conflitos reduzem a aceleração.
3.2 Transportar cada instrução pelos registradores de pipeline
Várias instruções compartilham o caminho de dados ao mesmo tempo, então cada estágio precisa dos valores da instrução que está nele. Registradores de pipeline preservam esses valores e seus sinais de controle em cada borda de clock.
Relacione o conteúdo ao trabalho posterior
| Registrador | Informação transportada adiante |
|---|---|
| IF/ID | Instrução e seu PC |
| ID/EX | Valores de origem, imediato, PC, rs1, rs2, rd, bits de função, controles de EX/MEM/WB |
| EX/MEM | Resultado da ULA, Zero, destino do desvio, valor a armazenar, rd, controles de MEM/WB |
| MEM/WB | Dados da memória, resultado da ULA, rd, controles de WB |
Cada registrador recebe o nome dos estágios adjacentes. Ele captura as saídas do primeiro estágio para uso no segundo. Não há registrador de pipeline extra após WB; WB escreve no estado arquitetural. O PC fornece o estado na entrada da busca.
O conteúdo de EX/MEM apresentado acima atende a um projeto que usa as informações de desvio em MEM. Um projeto que resolve desvios em EX retorna essas informações à busca mais cedo. O estágio de resolução determina a penalidade por conflito de controle.
Mantenha o destino e os dados juntos
Uma carga é decodificada em ID, mas escreve em rd três ciclos depois, em WB. Nesse momento, IF/ID contém uma instrução mais recente. Se a porta de escrita usasse o rd dessa instrução mais recente, o valor carregado iria para o registrador errado. Portanto, o número do destino da carga deve passar por ID/EX, EX/MEM e MEM/WB junto com o resultado.
Um armazenamento também transporta seu valor de rs2 por ID/EX e EX/MEM. O endereço e os dados devem corresponder ao mesmo armazenamento quando chegam à memória de dados. Os registradores de pipeline preservam a identidade de uma instrução por meio desses valores associados, embora várias outras instruções estejam ativas ao mesmo tempo.
Mova o controle com a instrução
O controle é gerado em ID. EX usa ALUSrc e ALUOp; MEM usa Branch, MemRead e MemWrite; WB usa MemtoReg e RegWrite. Cada estágio passa os controles necessários posteriormente junto com os dados.
Se o controle da ULA for decodificado em EX, ID/EX deverá transportar o bit 30 e funct3, além de ALUOp. As operações do tipo R compartilham ALUOp 10, então esse valor sozinho não distingue add, sub, AND e OR. Outro projeto válido decodifica a operação completa de 4 bits em ID e transporta esse código.
Mantenha regular a passagem pelos estágios
Uma instrução do tipo R passa por MEM sem usar a memória de dados. Um armazenamento passa por WB sem escrever em um registrador. Manter todas as instruções na mesma sequência de cinco estágios preserva a ordem das escritas nos registradores. Se uma instrução do tipo R pulasse MEM, ela poderia chegar à única porta de escrita de registrador no mesmo ciclo que a carga imediatamente anterior.
O banco de registradores atende a WB e ID em um ciclo escrevendo na primeira metade e lendo na segunda. ID pode então ver um valor escrito por uma instrução anterior naquele ciclo. Memórias de instruções e de dados separadas permitem que IF e MEM operem simultaneamente.
A maior parte das informações avança pelo pipeline. A escrita do resultado retorna um valor ao banco de registradores, e o controle de desvio retorna à busca uma decisão sobre o próximo PC. Esses caminhos longos de retorno explicam por que instruções posteriores podem precisar de ajuda antes que uma instrução anterior termine.
Principais conclusões
- Registradores de pipeline preservam os dados e os controles pendentes de cada instrução.
- rd segue até WB junto com o resultado que deve ser escrito nele.
- EX precisa dos bits de função ou de um código de controle da ULA já decodificado.
- Todas as instruções mantêm a sequência de cinco estágios, mesmo quando um estágio não realiza trabalho.
- A escrita na primeira metade e a leitura na segunda permitem que WB forneça um valor a ID no mesmo ciclo.
- Memórias separadas permitem a busca simultânea de instruções e o acesso a dados.
3.3 Ler diagramas de pipeline e contar ciclos
Um diagrama de pipeline mostra explicitamente a sobreposição. As linhas mostram as instruções em ordem de programa, e as colunas mostram os ciclos de clock. Cada célula indica o estágio ocupado pela instrução naquele ciclo.
Construa uma escada
Para cinco instruções independentes, registre IF para I1 no ciclo 1, depois ID, EX, MEM e WB nos ciclos 2–5. Inicie I2 um ciclo depois e repita. Os nomes dos estágios formam uma escada diagonal.
| Instrução | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| I1 | IF | ID | EX | MEM | WB | ||||
| I2 | IF | ID | EX | MEM | WB | ||||
| I3 | IF | ID | EX | MEM | WB | ||||
| I4 | IF | ID | EX | MEM | WB | ||||
| I5 | IF | ID | EX | MEM | WB |
No ciclo 5, I1 está em WB, I2 em MEM, I3 em EX, I4 em ID e I5 em IF. Ler uma coluna de cima a baixo fornece um retrato de um único ciclo. Acompanhar uma linha fornece o histórico de uma instrução.
Numere os estágios de IF = 1 a WB = 5. Sem paradas, a instrução i chega ao estágio s no ciclo i + s − 1. Portanto, I3 chega a MEM no ciclo 6. A última célula WB indica o ciclo de conclusão: cinco instruções terminam no ciclo 9.
Insira valores em um retrato
Considere I1 como ld x5, 16(x6), com x6 = 1000 e a memória em 1016 contendo 42. Considere I2 uma adição independente, I3 uma subtração independente e I4 uma operação OR independente. No ciclo 4, a carga lê a memória em 1016, I2 usa a ULA, I3 lê registradores e I4 é buscada. No ciclo 5, a carga escreve 42 em x5. Uma coluna contém trabalho de várias instruções, não vários estágios da carga.
Mostre uma parada sem interromper o trabalho anterior
Agora use ld x10, 0(x20) seguida por add x11, x10, x12 e depois por uma instrução independente. Com encaminhamento, a consumidora imediata ainda precisa de uma parada:
- A carga ocupa IF 1, ID 2, EX 3, MEM 4, WB 5.
- A add ocupa IF 2, ID 3, novamente ID 4, EX 5, MEM 6, WB 7.
- A terceira instrução ocupa IF 3, novamente IF 4, ID 5, EX 6, MEM 7, WB 8.
A add espera em ID enquanto uma bolha passa por EX. A carga continua normalmente; congelá-la adiaria justamente o valor de que a add precisa. Toda instrução posterior é atrasada junto com a add.
Conte a sequência uma única vez
Um pipeline de cinco estágios precisa de n + 4 ciclos sem paradas. Cada parada inserida acrescenta um ciclo, resultando em n + 4 + paradas quando não há outras perdas. O exemplo de três instruções termina no ciclo 8: três instruções, quatro intervalos extras de estágio e uma parada.
Os primeiros quatro ciclos enchem o pipeline, e os últimos quatro o esvaziam. São maneiras de observar a mesma sequência de n + 4 ciclos, não duas cobranças separadas de quatro ciclos. Em uma sequência longa, a contribuição fixa é pequena; em uma sequência curta, ela pode dominar a aceleração.
Principais conclusões
- As linhas acompanham uma instrução; as colunas mostram trabalho simultâneo.
- Sem paradas, a instrução i ocupa o estágio s no ciclo i + s − 1.
- Uma parada repete ID e retém a busca de instruções posteriores enquanto as anteriores avançam.
- O total é n + 4 + paradas para a sequência de cinco estágios sem outras perdas.
4Detectar e resolver conflitos de dados
A sobreposição de instruções pode fazer um valor ser necessário antes que a instrução que o produz o tenha escrito no banco de registradores. Identifique a produtora real de cada operando de origem e acompanhe os caminhos de encaminhamento que entregam novos resultados às instruções posteriores. As cargas revelam o limite temporal do encaminhamento: seus dados chegam tarde demais para uma consumidora imediata. Acompanhe a parada necessária e veja como mover trabalho independente pode eliminar o atraso e preservar o resultado do programa.
4.1 Identificar as dependências que podem atrasar a execução
Um conflito impede que a próxima instrução seja executada no ciclo planejado. Para identificá-lo, determine o recurso ou valor necessário, o ciclo em que ele é necessário e o ciclo em que fica disponível.
Distinga três tipos de conflito
| Tipo | Conflito | Exemplo |
|---|---|---|
| Estrutural | Demanda simultânea por um recurso | IF e MEM precisam de uma única memória com uma porta |
| Dados | Um valor necessário não está pronto | Uma subtração precisa do resultado da adição anterior |
| Controle | O endereço correto seguinte ainda não foi determinado | A busca continua antes da decisão de um desvio |
Memórias de instruções e de dados separadas eliminam o conflito estrutural entre IF e MEM. Escrever no banco de registradores na primeira metade de um ciclo e lê-lo na segunda também permite que WB e ID o compartilhem. Com essas disposições, não há conflito estrutural neste modelo de cinco estágios.
Identifique a produtora real
Uma dependência de leitura após escrita (RAW) existe quando uma instrução posterior lê um valor escrito por uma anterior. Em add x1, x2, x3 seguida por sub x4, x1, x5, a add produz x1 e a subtração o consome. Sem ajuda, a subtração lê x1 em ID durante o ciclo 3, antes que a add o escreva em WB durante o ciclo 5.
Uma dependência de escrita após leitura (WAR) reutiliza um registrador depois que uma instrução anterior o leu. Uma dependência de escrita após escrita (WAW) dá a duas instruções o mesmo destino. Essas dependências de nome não causam conflitos no projeto de cinco estágios com execução em ordem: as leituras ocorrem em ID e as escritas ocorrem em WB, em ordem de programa. Elas importam ao decidir se o software pode reordenar instruções.
Acompanhe uma sequência com destinos repetidos
Considere:
ld x5, 0(x10)
add x6, x5, x7
sub x5, x8, x9
or x9, x6, x5
As ligações RAW são carga → adição por x5, adição → OR por x6 e subtração → OR por x5. A OR precisa do novo x5 da subtração, não do valor carregado anteriormente. Procurar apenas nomes de registrador iguais pode deixar passar essa mudança de produtora.
A subtração escreve x5 após a adição ler x5, uma dependência WAR. A carga e a subtração também têm uma dependência WAW em x5. A OR escreve x9 após a subtração lê-lo, outra dependência WAR. Nenhuma delas cria um conflito de hardware WAR ou WAW nesse pipeline com execução em ordem.
Conte as esperas sem encaminhamento
Com apenas o banco de registradores que escreve antes de ler, uma consumidora imediata precisa de dois ciclos de parada. Ela deve adiar sua leitura em ID do ciclo 3 para o ciclo 5. Uma instrução independente entre a produtora e a consumidora reduz isso a uma parada. Duas instruções independentes permitem que a consumidora chegue a ID no ciclo WB da produtora, sem precisar de parada.
Uma dependência é uma propriedade do programa; se ela cria uma parada depende da temporização e dos caminhos disponíveis. Uma dependência RAW distante pode não exigir nenhuma ação. O registrador x0 nunca fornece um resultado pendente porque sua leitura sempre retorna zero e ele ignora escritas.
O software pode inserir instruções nop ou mover trabalho independente para os intervalos de espera. O hardware pode encaminhar resultados ou inserir paradas automaticamente. Ambas as abordagens devem manter cada consumidora ligada ao valor escrito por sua produtora na ordem do programa.
Principais conclusões
- Conflitos estruturais, de dados e de controle envolvem diferentes tipos de problema.
- RAW identifica uma produtora cujo valor é lido por uma instrução posterior.
- Somente dependências RAW criam conflitos de dados neste projeto de cinco estágios com execução em ordem.
- A instrução anterior mais próxima que escreve em um registrador de origem fornece o valor necessário.
- Sem encaminhamento, uma consumidora adjacente espera dois ciclos; uma instrução intermediária reduz a espera a um.
- WAR e WAW ainda restringem a reordenação válida pelo software.
4.2 Selecionar o valor mais recente disponível com encaminhamento
Um resultado da ULA existe antes de chegar à escrita no registrador. O encaminhamento, também chamado de bypass, envia esse resultado diretamente à entrada de uma instrução posterior, evitando a espera pelo banco de registradores.
Selecione a origem de cada operando
Dois multiplexadores alimentam os caminhos de execução. ForwardA atende a rs1 e ForwardB atende a rs2. Cada operando é verificado independentemente.
| Código de seleção | Origem do valor |
|---|---|
| 00 | Valor do registrador transportado em ID/EX |
| 10 | Resultado da ULA transportado em EX/MEM |
| 01 | Valor de escrita no registrador transportado em MEM/WB |
O caminho EX/MEM alcança a instrução imediatamente seguinte. O caminho MEM/WB alcança uma instrução duas posições atrás e pode transportar um resultado da ULA ou dados carregados. ForwardB também alimenta o caminho de dados de armazenamento antes que ALUSrc escolha entre esse valor e um imediato.
Verifique permissão, destino e correspondência
Para ForwardA = 10, a instrução em EX/MEM deve ter RegWrite = 1, rd diferente de zero e rd igual a ID/EX.rs1. Substitua rs1 por rs2 no teste de ForwardB. Um armazenamento ou desvio não deve ser tratado como produtor apenas porque seus bits de instrução se parecem com um número de destino. Escritas em x0 também não devem se tornar valores encaminhados.
Para ForwardA = 01, faça em MEM/WB as verificações correspondentes de RegWrite, rd diferente de zero e correspondência de registrador. Use esse resultado mais antigo somente quando EX/MEM ainda não fornecer o operando necessário. ForwardB segue a mesma regra de prioridade independentemente.
Acompanhe um resultado em consumidoras posteriores
Comece com add x1, x2, x3, em que x2 = 10 e x3 = 5. Ela produz 15 ao final de EX no ciclo 3.
- A próxima instrução,
sub x4, x1, x5, chega a EX no ciclo 4. Com x5 = 3, ForwardA = 10 fornece 15 e a subtração resulta em 12. and x6, x7, x1chega a EX no ciclo 5. ForwardB = 01 obtém x1 de MEM/WB.or x8, x1, x9lê registradores em ID durante o ciclo 5, após a escrita da add na primeira metade. Ela não precisa de encaminhamento em EX.
Nenhuma parada é necessária para essas dependências de resultados da ULA. A consumidora recebe o valor quando usa a ULA, mesmo que sua leitura anterior em ID tenha obtido um valor antigo.
Resolva duas escritas correspondentes
Em três instruções consecutivas add x1, x1, x2, add x1, x1, x3 e add x1, x1, x4, tanto EX/MEM quanto MEM/WB correspondem ao rs1 da terceira instrução. EX/MEM contém o resultado da segunda add, o x1 mais recente. MEM/WB contém o resultado da primeira add e deve perder a prioridade.
Os mesmos caminhos permitem que add x5, x6, x7 forneça dados a sd x5, 0(x8) sem parada. O x5 encaminhado chega ao caminho de dados de escrita da memória enquanto a ULA do armazenamento usa o deslocamento imediato.
O encaminhamento não pode fornecer dados antes que existam. EX/MEM para uma carga contém o endereço dela, não o valor carregado. A consumidora imediata deve esperar até que a carga termine MEM; encaminhar o endereço faria o cálculo usar a quantidade errada sem aviso.
Principais conclusões
- O encaminhamento entrega um resultado diretamente a uma instrução posterior antes da escrita no registrador.
- 00 seleciona ID/EX, 10 seleciona EX/MEM e 01 seleciona MEM/WB.
- Cada correspondência para encaminhamento exige RegWrite, rd diferente de zero e um número de origem correspondente.
- EX/MEM tem prioridade sobre MEM/WB para o mesmo operando.
- ForwardB pode fornecer dados de armazenamento e também um operando de registrador para a ULA.
- Uma consumidora imediatamente após uma carga ainda precisa de uma parada porque os dados ainda não estão prontos.
4.3 Inserir uma bolha ou preencher o intervalo com trabalho útil
Uma carga produz dados ao final de MEM. A instrução imediatamente seguinte precisaria desses dados no início de EX no mesmo ciclo. Uma parada move o estágio EX da consumidora para o ciclo seguinte, quando MEM/WB pode fornecer o valor.
Detecte o valor indisponível em ID
A unidade de detecção de conflitos examina a instrução em EX e a instrução que está sendo decodificada. O teste básico é ID/EX.MemRead = 1 e uma correspondência entre ID/EX.rd e qualquer um dos campos de número de origem em IF/ID. Um teste refinado exclui rd = x0 e verifica quais campos de origem a instrução decodificada realmente lê.
Essa última verificação evita uma parada desnecessária em uma instrução do tipo I cujos bits imediatos ocupam a posição usual de rs2. Comparar as posições dos campos sem interpretá-los é seguro, mas pode atrasar uma instrução que não lê o registrador.
Retenha o trabalho posterior e avance a carga
A parada realiza três ações coordenadas:
- Defina como zero os controles que entram em ID/EX, inserindo uma bolha.
- Defina PCWrite = 0 para manter inalterado o endereço de busca.
- Defina IF/IDWrite = 0 para manter a instrução que espera em ID.
A carga e as instruções anteriores continuam avançando. A bolha passa pelos estágios posteriores sem escrever em registradores ou na memória. Congelar ID/EX com a carga ainda nele repetiria a carga em vez de inserir uma operação vazia.
Para ld x10, 0(x20) seguida por add x11, x10, x12, a carga está em EX e a add em ID durante o ciclo 3. No ciclo 4, a carga está em MEM, a bolha em EX e a add ainda em ID. No ciclo 5, a carga está em WB e a add chega a EX com ForwardA = 01.
Escalone instruções independentes
Considere:
ld x10, 0(x20)
ld x11, 8(x20)
add x12, x10, x11
sd x12, 24(x20)
ld x13, 16(x20)
add x14, x10, x13
sd x14, 32(x20)
Os usos de x11 e x13 vêm imediatamente após suas cargas. Com encaminhamento, eles causam duas paradas, resultando em 7 + 4 + 2 = 13 ciclos. Mova ld x13, 16(x20) para a terceira posição, antes da primeira add. Isso separa a carga de x11 da consumidora e coloca x13 suficientemente antes da instrução que o consome. A sequência passa a levar 7 + 4 = 11 ciclos.
O movimento é válido porque a carga lê x20, que as instruções ultrapassadas não alteram. Seu destino x13 não afeta essas instruções. Seu endereço x20 + 16 é diferente de x20 + 24, endereço do armazenamento ultrapassado. Uma carga não pode passar por um armazenamento que possa escrever nos bytes que ela lê. A reordenação deve preservar as dependências RAW, WAR, WAW e de memória.
Combine paradas e encaminhamento
Para ld x5, 0(x10), add x6, x5, x7, sub x5, x8, x9 e or x9, x6, x5, somente o par imediato de carga e uso sofre uma parada. Quando OR chega a EX, ForwardA = 01 fornece o x6 da add e ForwardB = 10 fornece o x5 da subtração. O total é 4 + 4 + 1 = 9 ciclos.
Principais conclusões
- Um par de carga e uso precisa de uma parada quando há encaminhamento.
- Uma parada zera os controles que entram em ID/EX e congela PC e IF/ID.
- A carga continua por MEM enquanto a consumidora espera em ID.
- Escalonar trabalho independente pode separar cargas de suas consumidoras.
- Uma reordenação válida preserva as dependências de registradores e de memória.
- Após uma parada, selecione cada operando encaminhado de sua própria produtora real.
- Nessas sequências de cinco estágios, ciclos = instruções + 4 + paradas.
5Tratar conflitos de controle e prever desvios
Um desvio faz o endereço da próxima instrução depender de trabalho ainda em andamento no pipeline. Acompanhe o que acontece quando a busca espera, prevê o próximo endereço ou se recupera de uma previsão errada. Acompanhe preditores baseados em histórico e distinga suas previsões de direção dos destinos de desvio armazenados. Por fim, combine atrasos de carga e uso e penalidades de desvio com o período de clock para comparar tempos de execução, incluindo os compromissos de projeto introduzidos por pipelines mais profundos.
5.1 Recuperar-se de desvios e exceções
A busca precisa de um novo endereço a cada ciclo. Um desvio condicional fornece a escolha correta somente após a comparação e o cálculo do destino. Essa lacuna cria um conflito de controle.
Relacione o estágio de resolução à penalidade
Em um pipeline de cinco estágios com redirecionamento após o estágio de resolução, um resultado conhecido ao final de ID perde uma posição de busca em caso de previsão errada. A resolução ao final de EX perde duas; ao final de MEM, perde três. Instruções posteriores já entraram durante essas posições.
Uma estratégia interrompe a busca até que cada desvio seja decidido. É simples, mas desvios tomados e não tomados pagam a espera completa. A estratégia de prever que o desvio não será tomado continua em PC + 4. Uma previsão correta não precisa de recuperação. Um desvio tomado redireciona a busca e descarta as instruções posteriores do caminho sequencial.
Acompanhe um desvio tomado
Busque beq x1, x2, 16 no endereço 100 no ciclo 1 e resolva o desvio ao final de EX no ciclo 3. A predição de desvio não tomado busca os endereços 104 e 108 nos ciclos 2 e 3. Se o desvio for tomado, ambas são instruções do caminho errado. A busca começa em 116 no ciclo 4, após uma penalidade de dois ciclos.
Um descarte de instruções do pipeline impede que essas entradas posteriores alterem o estado arquitetural ou gerem exceções. A implementação pode invalidar entradas ou suprimir seus controles e efeitos de exceção. Um armazenamento do caminho errado nunca deve resultar em uma escrita efetiva na memória.
Uma bolha não é igual a uma instrução RISC-V composta apenas por zeros. A codificação composta apenas por zeros é ilegal. Se uma codificação de instrução real for inserida, a nop canônica será addi x0, x0, 0, codificada como 0x00000013. Uma entrada de pipeline descartada, por sua vez, não representa nenhuma instrução executada.
Resolva mais cedo, mas obtenha operandos mais cedo
Mover o comparador e o somador do destino do desvio para ID reduz a penalidade de redirecionamento a um ciclo. A comparação passa a precisar dos valores de origem em ID, então o encaminhamento usual apenas para EX é insuficiente. Com encaminhamento adequado para ID, um desvio imediatamente após a instrução da ULA que produz seu operando espera um ciclo. Imediatamente após uma carga produtora, ele espera dois. A resolução antecipada troca menos posições de busca perdidas por uma entrega de operandos mais exigente.
A predição estática fixa uma regra antecipadamente. Regras comuns são sempre não tomado, sempre tomado e tomado para trás/não tomado para a frente. Um desvio para trás no fim de um laço frequentemente repete o laço, o que torna essa direção uma pista útil.
RISC-V não tem posição de atraso de desvio. Se um desvio for tomado, sua sucessora sequencial não será executada apenas por ter sido buscada. Alguns projetos MIPS mais antigos faziam essa sucessora executar como uma instrução definida na posição de atraso; essa é uma regra diferente da ISA.
Preserve um limite de exceção precisa
Uma instrução ilegal ou ecall transfere o controle para uma rotina de tratamento. As instruções anteriores terminam; a instrução que causou a exceção e as posteriores não efetivam seus efeitos normais. O processador registra o PC da instrução causadora e a causa, usando registradores como sepc/scause no modo supervisor ou mepc/mcause no modo de máquina, e depois busca a partir da rotina de tratamento. Essa exceção precisa apresenta o estado como um limite entre instruções anteriores concluídas e trabalho posterior não concluído.
Principais conclusões
- A resolução mais tardia de um desvio deixa mais instruções posteriores para descartar.
- A predição de desvio não tomado paga uma penalidade de recuperação somente quando erra.
- O descarte suprime alterações de estado e exceções do caminho errado.
- Bits de instrução todos iguais a zero são ilegais; a nop canônica é 0x00000013.
- A resolução antecipada em ID também exige operandos mais cedo e encaminhamento adequado.
- RISC-V não tem posição arquitetural de atraso de desvio.
- Exceções precisas preservam o trabalho anterior concluído e descartam os efeitos da instrução causadora e das posteriores.
5.2 Acompanhar predições de desvio baseadas em histórico
A predição dinâmica aprende com os resultados observados durante a execução de um programa. Uma tabela de histórico de desvios (BHT) armazena pequenas entradas de estado selecionadas por bits de um endereço de desvio. Primeiro faça a previsão, depois compare-a com o resultado real e então atualize a entrada.
Veja por que um bit erra duas vezes em um laço
Um preditor de 1 bit armazena o resultado anterior. Se o último desvio foi tomado, ele prevê tomado na próxima vez; caso contrário, prevê não tomado. Em um laço executado repetidamente cujo desvio é tomado nove vezes e depois não é tomado uma vez, a saída deixa o bit em não tomado.
Na próxima execução, o primeiro desvio tomado é previsto incorretamente. Os desvios tomados intermediários ajustam o bit para tomado, então a saída final não tomada também é prevista incorretamente. Em regime permanente, são dois erros em dez resultados, ou precisão de 80%.
Acrescente um segundo bit para persistência
Um contador de saturação de 2 bits tem estados de 0 a 3. Os estados 0 e 1 preveem não tomado; 2 e 3 preveem tomado. Um resultado tomado incrementa o contador, e um resultado não tomado o decrementa. Os valores param em 0 e 3.
| Estado | Nome | Previsão |
|---|---|---|
| 0 | Fortemente não tomado | Não tomado |
| 1 | Fracamente não tomado | Não tomado |
| 2 | Fracamente tomado | Tomado |
| 3 | Fortemente tomado | Tomado |
A partir do estado 3, uma saída não tomada move o estado para 2, que ainda prevê tomado. Portanto, a próxima entrada no laço é prevista corretamente. O mesmo laço de dez resultados tem um erro por execução em regime permanente, ou precisão de 90%. São necessários dois resultados contrários consecutivos para inverter uma previsão a partir de um estado forte.
Acompanhe antes de atualizar
Comece no estado 1 e observe tomado, tomado, não tomado, tomado:
- O estado 1 prevê não tomado: errado. Incremente para 2.
- O estado 2 prevê tomado: correto. Incremente para 3.
- O estado 3 prevê tomado: errado. Decremente para 2.
- O estado 2 prevê tomado: correto. Incremente para 3.
Há dois erros e o estado final é 3. Atualizar antes de prever daria incorretamente ao preditor acesso ao resultado que ele deve prever.
Distinga direção, destino e interferência
Dois endereços de desvio podem indexar a mesma entrada da BHT. Essa colisão de entradas permite que seus resultados interfiram entre si. Uma previsão errada custa ciclos, mas a recuperação verifica o resultado real e preserva a correção.
Um buffer de destinos de desvios (BTB) fornece um endereço, não apenas um bit de direção. Consultado pelo PC durante IF, ele pode fornecer o destino previsto para um desvio tomado no próximo ciclo de busca, antes da decodificação. A predição de direção decide se esse destino será usado.
Um histórico simples tem limites. Em um padrão que alterna estritamente entre tomado e não tomado, um preditor de 1 bit continua errando depois que passa a acompanhar o padrão. Um contador de 2 bits acerta no máximo metade das vezes; começar no estado 1 antes de um resultado tomado faz com que erre todas as vezes. Preditores por correlação acrescentam o histórico recente de desvios, preditores por torneio selecionam entre preditores e uma pilha de endereços de retorno prevê destinos de retorno de procedimentos. Pipelines mais profundos tornam a recuperação mais cara porque mais trabalho posterior se acumula antes da resolução.
Principais conclusões
- Um preditor de 1 bit repete o último resultado.
- Um contador de 2 bits prevê tomado nos estados 2 e 3 e satura em 0 e 3.
- A previsão usa o estado antigo; a atualização ocorre após o resultado real.
- Dois bits evitam o erro na entrada do laço causado por uma única saída.
- A colisão de entradas na BHT permite que desvios diferentes interfiram em uma mesma entrada de histórico.
- Um BTB fornece um destino previsto; a predição de direção escolhe se ele será usado.
5.3 Transformar taxas de conflito em tempo de execução
A velocidade do pipeline depende tanto do período de clock quanto dos ciclos gastos em espera ou recuperação. O CPI efetivo mede a média desses ciclos extras ao longo da sequência de instruções.
Pondere cada custo pelas instruções afetadas
Para uma longa sequência de emissão única, comece com CPI ideal 1. Acrescente cada fonte distinta e não sobreposta de ciclos perdidos como a fração de instruções afetadas multiplicada pelos ciclos perdidos por ocorrência. Uma taxa condicional também precisa da fração à qual ela se refere.
Suponha que 25% das instruções sejam cargas e que 40% dessas cargas tenham uma consumidora imediata. Cada par desse tipo sofre uma parada, então a contribuição de carga e uso é 0,25 × 0,40 × 1 = 0,10 ciclos por instrução. Suponha que 15% sejam desvios, que 10% deles sejam previstos incorretamente e que a recuperação custe dois ciclos. A contribuição dos desvios é 0,15 × 0,10 × 2 = 0,03.
Somar os custos independentes resulta em CPI = 1 + 0,10 + 0,03 = 1,13. Atribuir uma parada a toda carga produziria 0,25 em vez de 0,10. Aplicar a taxa de erro de desvio de 10% a toda instrução também resultaria em uma contagem excessiva.
Inclua o período de clock e a contagem de instruções
Tempo de execução é igual a contagem de instruções × CPI × período de clock. Um clock de 4 GHz tem período de 0,25 ns. Para 10⁹ instruções com CPI de 1,13, a execução leva 10⁹ × 1,13 × 0,25 ns = 0,2825 s. O tempo médio por instrução é de 0,2825 ns.
Para uma sequência curta, conte explicitamente os ciclos de enchimento, esvaziamento e conflito. O CPI básico ideal de 1 descreve a vazão em regime permanente; um pipeline de cinco estágios que executa apenas algumas instruções também tem sua contribuição de quatro ciclos para enchimento e conclusão.
Compare estratégias de desvio em condições iguais
Mantenha o custo de carga e uso de 0,10, a fração de desvios de 0,15 e a penalidade de dois ciclos:
| Estratégia de desvio | Custo dos desvios | CPI efetivo |
|---|---|---|
| Esperar em todo desvio | 0,15 × 2 = 0,30 | 1,40 |
| Prever não tomado, 60% tomados | 0,15 × 0,60 × 2 = 0,18 | 1,28 |
| Dinâmica, precisão de 90% | 0,15 × 0,10 × 2 = 0,03 | 1,13 |
Com o mesmo período de clock e a mesma contagem de instruções, a predição dinâmica é cerca de 1,24 vez mais rápida que a espera, pois 1,40/1,13 ≈ 1,24.
Entre processadores diferentes, compare CPI × período. Um projeto de ciclo único com período de 1000 ps leva 1000 ps por instrução. Um pipeline com período de 270 ps e CPI de 1,13 leva 305,1 ps por instrução, uma aceleração de cerca de 3,28. Comparar apenas o CPI favoreceria o CPI 1 do ciclo único e levaria à conclusão errada.
Entenda o próximo compromisso de projeto
Mais estágios de pipeline podem reduzir o trabalho combinacional por ciclo. Eles também introduzem sobrecarga de registradores e podem aumentar as penalidades por carga e uso e por previsões erradas. A frequência de clock sozinha não determina se o projeto mais profundo é melhor.
A emissão múltipla inicia várias instruções por ciclo, permitindo CPI abaixo de 1 e instruções por ciclo (IPC) acima de 1. Grupos de emissão estática são escolhidos pelo compilador; a emissão dinâmica, ou execução superescalar, é escolhida pelo hardware e frequentemente usa especulação e execução fora de ordem. Dependências de dados e predição de desvios ainda limitam a sobreposição útil.
Principais conclusões
- Calcule a média de cada custo de conflito sobre todas as instruções, incluindo a fração à qual uma taxa condicional se refere.
- Some as contribuições distintas de ciclos perdidos ao CPI ideal 1 para sequências longas de emissão única.
- Tempo de execução é contagem de instruções × CPI × período de clock.
- Compare processadores diferentes usando CPI × período, não apenas CPI.
- Pipelines mais profundos trocam estágios mais curtos por mais sobrecarga e maior custo de conflitos.
- A emissão múltipla pode alcançar IPC acima de 1 e CPI abaixo de 1.
Exercícios resolvidos de Caminho de dados e pipeline
1Acompanhar uma instrução da busca ao resultado salvo
14 passos
- 1IntroduçãoTransforme bits de instrução em valores salvos
Uma instrução indica um trabalho, como somar valores de registradores ou carregar dados. O processador precisa de hardware que realize esse trabalho e de sinais de controle que selecionem os caminhos corretos.
Acompanhe o caminho de dados de ciclo único dos elementos de armazenamento até suas saídas. Depois, acompanhe uma sequência curta e identifique exatamente o que muda em cada borda de clock ao final do ciclo. Cada instrução nesse subconjunto ocupa 4 bytes.
- 2ExplicaçãoComece pelo endereço de instrução armazenado
O PC armazena o endereço da instrução atual. A memória de instruções retorna a instrução nesse endereço, e um somador separado calcula PC + 4 ao mesmo tempo.
O PC é um elemento de estado: ele mantém seu valor durante o ciclo. O somador é combinacional: sua saída acompanha as entradas. Na borda de clock ao final do ciclo, o PC captura o próximo endereço escolhido pelo multiplexador de entrada.
- 3ExplicaçãoLeia os operandos e forme o imediato
O banco de registradores lê rs1 e rs2 por duas portas. Sua porta de escrita altera rd somente quando RegWrite habilita a escrita na borda de clock; a leitura de x0 sempre retorna zero.
ImmGen reconstrói um imediato e faz a extensão de sinal até 64 bits. Copiar o bit de sinal mantém negativo um deslocamento negativo. Para o valor de 12 bits
1111 1111 1000, o resultado é −8, não o valor 4088 obtido por extensão com zeros. - 4Ideia-chaveSepare um resultado calculado de um resultado armazenado
A ULA soma, subtrai ou executa AND ou OR conforme sua entrada de controle. Seu indicador Zero informa se o resultado é zero. Multiplexadores selecionam entre entradas candidatas, e habilitações de escrita determinam quais valores selecionados passam a compor o estado armazenado.
Uma unidade pode calcular uma saída não usada sem alterar o programa. Uma habilitação de escrita na memória é diferente: ativá-la pode salvar um valor mesmo quando essa escrita não era pretendida.
- 5DesafioQual componente guarda o valor?
Um somador de destino de desvio calcula 740 enquanto o PC ainda contém 720. Antes da borda ativa, qual unidade mantém o endereço da instrução atual, e o próprio destino calculado altera esse endereço?
---reveal---
O PC mantém 720. O somador apenas calcula um possível destino. O PC muda quando o próximo valor selecionado é capturado na borda; um valor candidato em uma entrada não selecionada não o sobrescreve.
- 6ExplicaçãoDirecione operações aritméticas e de memória
Uma operação do tipo R lê dois valores de registradores, envia-os pela ULA e retorna o resultado a rd. Uma carga, por sua vez, precisa de um endereço formado por base mais deslocamento e depois do valor da memória nesse endereço.
Um armazenamento calcula um endereço da mesma forma, mas rs2 fornece os dados a escrever. O caminho de dados até a memória deve permanecer disponível mesmo enquanto ALUSrc seleciona um imediato para a segunda entrada da ULA.
- 7ExplicaçãoEscolha as conexões compartilhadas
Três seletores unem os caminhos:
- ALUSrc escolhe rs2 ou o imediato para a ULA.
- MemtoReg escolhe o resultado da ULA ou os dados da memória para rd.
- PCSrc escolhe PC + 4 ou o destino do desvio.
Uma carga define ALUSrc como 1 e MemtoReg como 1. Um armazenamento também usa o caminho de endereço com imediato, mas desabilita a escrita no registrador e habilita a escrita na memória.
- 8DicaCalcule um destino de desvio uma única vez
Para
beq, a subtração testa a igualdade enquanto um somador separado forma PC do desvio + deslocamento em bytes com sinal. Esses cálculos podem ocorrer em paralelo.A codificação do formato B omite o bit zero menos significativo do deslocamento. ImmGen pode reconstruir o deslocamento completo em bytes, ou um deslocamento de bits externo pode fornecer esse bit. Quando o deslocamento completo em bytes já existe, deslocá-lo novamente dobraria seu valor.
- 9DesafioSepare o endereço de armazenamento dos dados
Para
sd x11, 32(x18), x18 contém 2400 e x11 contém 55. Quais são o resultado da ULA e os dados de escrita na memória?---reveal---
A ULA calcula o endereço 2432 a partir de 2400 + 32. Os dados de escrita na memória são 55, fornecidos por x11. Enviar 55 à ULA no lugar do deslocamento calcularia um endereço sem relação com o pretendido; selecionar o imediato deve deixar intacto o caminho dos dados de armazenamento.
- 10ExemploAcompanhe uma adição na borda de clock
No PC 400,
add x5, x6, x7lê x6 = 25 e x7 = −9. ALUSrc seleciona o segundo valor de registrador, a ULA soma e MemtoReg seleciona o resultado 16.Na borda, RegWrite salva 16 em x5, e o PC passa a valer 404. A memória de dados não é lida nem escrita.
- 11ExemploAcompanhe uma carga e depois um armazenamento
No PC 404,
ld x5, 16(x6)usa x6 = 1000 e lê o endereço 1016, cuja palavra dupla contém 42. A ULA fornece 1016; a memória fornece 42, que MemtoReg seleciona para x5. O PC avança para 408.A próxima instrução,
sd x5, 24(x6), calcula o endereço 1024 e escreve o valor atualizado de x5, 42. Ela avança o PC para 412 sem escrever em nenhum registrador. - 12ExemploDecida o endereço da próxima instrução
No PC 412,
beq x8, x9, 12lê dois valores iguais a 7. A subtração resulta em zero e o somador de destino fornece 424. Branch AND Zero seleciona 424 como o próximo PC.Se x9 fosse 8, a subtração resultaria em −1 e o PC avançaria para 416. Nenhum dos casos escreve em um registrador de uso geral ou na memória de dados. A comparação controla qual endereço candidato é salvo.
- 13DesafioIdentifique a causa do valor incorreto no destino
Uma
ld x10, 8(x20)correta com x20 = 3200 lê a palavra dupla 91 em 3208. Um multiplexador de escrita defeituoso, porém, deixa x10 = 3208. O que o multiplexador selecionou e o que deveria selecionar?---reveal---
Ele selecionou o resultado da ULA, o endereço 3208. Deveria selecionar a saída da memória de dados, 91. O cálculo do endereço pode estar correto enquanto o estado final está errado porque a escrita no registrador escolheu a fonte errada.
- 14RecapitulaçãoRelacione cada escrita de estado ao caminho correspondente
Para um acompanhamento completo de ciclo único, distinga o resultado aritmético, o endereço efetivo, os dados da memória e o próximo PC. Cargas e operações aritméticas escrevem em rd por entradas diferentes do multiplexador; armazenamentos usam um caminho de dados separado; desvios selecionam apenas o endereço da próxima instrução.
Todos usam o mesmo limite de borda: o trabalho combinacional produz valores candidatos durante o ciclo, e as escritas de estado habilitadas capturam os valores selecionados ao final dele.
2Determinar o controle a partir do trabalho exigido por uma instrução
11 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoFaça o caminho de dados compartilhado obedecer à instrução
- 2ExemploDetermine uma linha de carga a partir do caminho dos dados
- 3ExplicaçãoProteja o estado com habilitações de escrita definidas
- 4Ideia-chaveDeixe os dados completarem a decisão de desvio
- 5DesafioEscolha a configuração não especificada que não causa efeito
- 6ExplicaçãoUse ALUOp para selecionar uma classe de operação
- 7ExemploAcompanhe os bits de função da subtração
- 8ConexãoReutilize o somador para subtração
- 9DesafioMantenha os bits de uma carga em sua função adequada
- 10DesafioAmplie o controle sem acrescentar um caminho de endereço
- 11RecapitulaçãoRelacione permissões e decodificação
3Observe a sobreposição de instruções independentes
15 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoSepare uma instrução da sequência de instruções
- 2ExemploIdentifique a instrução completa mais lenta
- 3ExemploDefina o clock do pipeline pelo estágio mais lento
- 4AnalogiaCompare vazão e latência
- 5DesafioCalcule uma sequência curta
- 6ExplicaçãoTransporte a instrução, não apenas seu resultado
- 7ExemploMantenha o destino junto a uma carga
- 8ExplicaçãoTransporte os controles até que seu estágio os use
- 9DesafioPor que manter a posição MEM não usada?
- 10ExemploConstrua uma escada de estágios
- 11DicaLocalize um estágio sem desenhar todas as células
- 12ExemploInsira uma espera sem repetir o trabalho anterior
- 13DesafioDetermine a conclusão após o atraso
- 14DesafioCombine armazenamento com um retrato do ciclo
- 15RecapitulaçãoLeia o desempenho a partir da sequência
4Acompanhar o valor mais recente em um pipeline com parada
17 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoIdentifique onde está o valor necessário
- 2ExplicaçãoSepare os conflitos por sua causa
- 3ExemploIdentifique a produtora de cada leitura
- 4DesafioA reutilização de registrador cria um conflito de hardware?
- 5ExplicaçãoEntregue um resultado da ULA antes da escrita no registrador
- 6DicaVerifique cada correspondência de encaminhamento
- 7ExemploResolva duas escritas correspondentes
- 8DesafioEncaminhe dois operandos independentemente
- 9ConexãoPreserve o caminho separado dos dados de armazenamento
- 10ExplicaçãoVeja o limite temporal do encaminhamento
- 11ExplicaçãoRetenha a consumidora e insira uma bolha
- 12ExemploAcompanhe a espera ao longo de três ciclos
- 13DicaFaça o detector verificar as origens reais
- 14ExemploMova trabalho útil para o intervalo
- 15DesafioVerifique o movimento antes de contar o ganho
- 16DesafioCombine a bolha com o encaminhamento posterior
- 17RecapitulaçãoEscolha a solução conforme o momento de produção
5Recuperar a sequência de instruções e medir o custo
19 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoMantenha o trabalho útil no caminho correto
- 2ExplicaçãoConte as posições de busca posteriores
- 3ExemploAcompanhe um desvio tomado com predição de não tomado
- 4DicaDescarte trabalho sem executar uma instrução ilegal
- 5ExplicaçãoTroque a resolução antecipada pela necessidade de operandos mais cedo
- 6DesafioProteja o estado após uma previsão errada
- 7ConexãoPreserve o limite da exceção
- 8ExplicaçãoUse o histórico para prever a direção
- 9ExplicaçãoDeixe dois bits manterem a confiança
- 10ExemploAcompanhe a previsão antes da atualização
- 11DesafioTeste um par de resultados contrários
- 12ExplicaçãoSepare direção de destino
- 13Ideia-chaveReconheça interferências e limites dos padrões
- 14ExemploConverta taxas condicionais em custo por instrução
- 15ExemploInclua a duração de um ciclo
- 16ExemploCompare estratégias de predição
- 17DesafioRecupere a fração de desvios omitida
- 18DesafioAvalie um pipeline mais profundo
- 19RecapitulaçãoMeça a sobreposição útil após os custos de recuperação
Questões de Caminho de dados e pipeline
Conjunto 1: Acompanhe valores e sinais de controle10 Questões de Prática
Questão 1 de 10
Mostrar respostaOcultar resposta
Questão 2 de 10
sd x14, 40(x9), de onde vem o valor escrito na memória?Mostrar respostaOcultar resposta
Questão 3 de 10
ld x12, -16(x8) é executada com x8 = 2080 e uma palavra dupla de valor −6 no endereço 2064. Quais são os valores de x12 e do PC após a conclusão?Mostrar respostaOcultar resposta
Questão 4 de 10
beq x16, x17, -24 no endereço 880 compara dois registradores que contêm 11. Qual endereço é buscado em seguida?Mostrar respostaOcultar resposta
Questão 5 de 10
beq?Mostrar respostaOcultar resposta
Questão 6 de 10
000 e bit 30 = 1. Quais valores de ALUOp e controle da ULA esse projeto produz?Mostrar respostaOcultar resposta
000 e bit 30 = 1 para selecionar subtração, código 0110. ALUOp 01 também solicita subtração, mas é a configuração da classe de desvio e não é gerada por esse código do tipo R.Questão 7 de 10
1111 1111 0000. Qual valor com sinal ImmGen deve fornecer ao caminho de dados de 64 bits?Mostrar respostaOcultar resposta
Questão 8 de 10
ld x15, 32(x18) de ciclo único tem x18 = 3000 e a memória em 3032 contém 77. Uma falha de controle muda apenas MemtoReg de 1 para 0. A próxima instrução é sd x15, 48(x18). Qual valor esse armazenamento escreve e onde?Mostrar respostaOcultar resposta
Questão 9 de 10
Mostrar respostaOcultar resposta
Questão 10 de 10
Mostrar respostaOcultar resposta
Conjunto 2: Leia a sequência de cinco estágios10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
add x13, x2, x3; or x20, x4, x5; sub x14, x13, x6. A instrução intermediária é independente. Quantas paradas e quantos ciclos no total são necessários?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
ld x21, 0(x25); add x22, x21, x3; or x24, x6, x7; sub x23, x22, x4. A OR é independente, e não há conflitos de desvio ou estruturais. Em qual ciclo a subtração final entra em EX?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 3: Escolha operandos e escalone em torno de cargas10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
sub x11, x2, x3 à instrução posterior and x12, x11, x4?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
add x18, x0, x7. O resultado anterior da ULA é diferente de zero. Qual valor a add deve usar como primeiro operando?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
add x9, x1, x2; add x9, x9, x3; sub x11, x9, x4 com x1 = 6, x2 = 7, x3 = 9 e x4 = 5. Qual valor a subtração produz e qual registrador de pipeline fornece seu x9?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
add x16, x5, x6 é seguida imediatamente por sd x16, 56(x20). O pipeline encaminha os dados de armazenamento antes da seleção de ALUSrc. Como o armazenamento obtém seus dados?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
ld x6, 0(x20); add x7, x6, x8; ld x9, 16(x20); sub x10, x9, x11. Nenhuma outra instrução altera x20, x8 ou x11, e ambas as leituras são válidas. Qual ordenação elimina as duas paradas por carga e uso e preserva os resultados?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
ld x5, 0(x20); add x6, x5, x7; sd x6, 8(x20); ld x8, 8(x20). Por que mover a carga final para a segunda posição é inválido, mesmo que preencha o intervalo de carga e uso?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
add x5, x6, x7; sub x6, x8, x9, qual dependência de registrador restringe a troca de ordem das instruções?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
ld x12, 0(x26); add x13, x12, x2; ld x14, 8(x26); sub x15, x14, x13; sd x15, 24(x26). Os dados de armazenamento são encaminhados antes de ALUSrc e não há outros conflitos. Quantos ciclos são necessários até a posição WB final?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 4: Recupere a busca e acompanhe o histórico de desvios10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
ld x18, 0(x22) é seguida imediatamente por um desvio que compara x18. O desvio é resolvido em ID. Em relação a uma execução sem espera por operando, quantos ciclos a comparação deve esperar e por quê?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 5: Combine a temporização do pipeline e os custos de conflitos10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
ALUOp
ALUSrc
B
Banco de registradores
Bolha
Borda de clock
Buffer de destinos de desvios
C
Caminho crítico
Caminho de dados
Campo de função
000, o bit 30 da instrução seleciona qual operação aritmética é executada.Colisão de entradas
Conflito de carga e uso
Conflito de controle
Conflito de dados
Conflito estrutural
Contador de programa
Contador de saturação
Controle da ULA
0110 seleciona subtração, enquanto o código relacionado 0010 seleciona adição.Controle por lógica fixa
CPI efetivo
D
Decodificação em dois níveis
Dependência de escrita após escrita
Dependência de escrita após leitura
Dependência de leitura após escrita
Dependência de memória
Descarte de instruções do pipeline
Destino do desvio
Diagrama de pipeline de múltiplos ciclos
E
Elemento combinacional
Elemento de estado
Emissão múltipla
Encaminhamento
Enchimento do pipeline
Endereço efetivo
ld x4, 24(x8) com x8 = 2000, o endereço efetivo é 2024.Escalonamento de código
Escrita do resultado no registrador
Esvaziamento do pipeline
EX/MEM
Exceção precisa
Extensão de sinal
F
ForwardA
ForwardB
G
Gerador de imediatos
I
ID/EX
IF/ID
Indicador de zero
IPC
L
Latência
M
MEM/WB
MemRead
MemtoReg
MemWrite
Multiplexador
P
Palavra dupla
ld e sd.Parada do pipeline
PCSrc
Penalidade de desvio
Pilha de endereços de retorno
Predição dinâmica de desvios
Predição estática
Preditor por correlação
Preditor por torneio
Processador superescalar
R
Registrador de pipeline
RegWrite
S
Segmentação em pipeline
Sobrecarga temporal dos registradores de pipeline
T
Tabela de histórico de desvios
Tempo de execução
U
Unidade de detecção de conflitos
Unidade de encaminhamento
V
Valor indiferente
beq porque nenhuma escrita em registrador ocorre.Vazão
- 1Desempenho de computadores
- 2Linguagem de montagem RISC-V
- 3Aritmética computacional
- 4Caminho de dados e pipeline
- 5Hierarquia de memória e caches
- 6Processadores paralelos
Sobre esta aula
Crie seus próprios Materiais de Estudo
Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.