Pipelines João Canas Ferreira Mar-Abr 2004 Contém figuras de: Computer Organization & Design, D. A Patterson e J. L. Hennessy, 2 a ed. (cap. 6) c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 1/52
Conceitos básicos Preservar a concorrência Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Conflitos de dados Forwarding Protelamento Efeitos de conflitos de controlo Mitigação de efeitos c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 2/52
Conceitos básicos Preservar a concorrência Pipelining Trata-se de uma técnica de implementação em que múltiplas instruções estão em execução simultânea (concorrente). Não diminui o tempo de execução de uma instrução. Várias instruções estão simultaneamente em diferentes fases de processamento. O débito aumenta: uma instrução terminada por ciclo (idealmente). Cinco etapas clássicas : ler instrução de memória; descodificar instrução e ler registos; execução de operação ou cálculo de endereço; acesso a operando em memória; guardar resultado num registo. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 3/52
Conceitos básicos Preservar a concorrência Sem vs. com pipeline Tipo Leitura Registo ALU Acesso mem Escrita Reg. Total load 2 1 2 2 1. (lw) 8 store (sw) 2 1 2 2 7 R (add,...) 2 1 2 1. 6 salto (beq) 2 1 2. 5 tempos em ns Sem pipelining: 0 2 4 6 8 10 12 14 16 18 IF R ALU Mem R lw $1, 100($0) 8 ns IF R ALU Mem R 8 ns IF R lw $2, 200($0) lw $3, 300($0) Com pipelining: 0 2 4 6 8 10 12 14 16 18 IF R ALU Mem R 2 ns lw $1, 100($0) IF R ALU Mem R 2 ns IF R ALU Mem R lw $2, 200($0) lw $3, 300($0) c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 4/52
Conceitos básicos Preservar a concorrência Conflitos Conflito estrutural: a infra-estrutura não suporta a combinação de (fases de) instruções que se pretende executar no mesmo ciclo. Exemplo: acesso a memória. Conflito de dados: uma (fase de) instrução depende dos resultados de outra. Exemplo: duas operações tipo R, em que a segunda usa os resultados da primeira. Solução: forwarding Conflito de controlo: execução de uma instrução depende de uma decisão ainda não tomada. Soluções: protelar, prever, delayed decision. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 5/52
Conceitos básicos Preservar a concorrência Protelamento causado por instruções de salto É necessário esperar para saber qual a próxima instrução a executar. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 6/52
Conceitos básicos Preservar a concorrência Delayed-branch A instrução que segue um salto condicional é sempre executada. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 7/52
Conceitos básicos Preservar a concorrência Representação de pipeline Cinzento indica os elementos usados na execução das instruções: Quando metade de um elemento está assinalada, significa que é usada na primeira (à esquerda) ou na segunda (à direita) metade do ciclo. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 8/52
Conceitos básicos Preservar a concorrência Forwarding Passagem directa de operandos entre andares da pipeline. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 9/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados básico c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 10/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Funcionamento de caminho de dados básico com pipeline c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 11/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados básico com pipeline c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 12/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Ciclos 1 e 2: actividade c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 13/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Ciclo 3: actividades c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 14/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Ciclos 4 e 5: actividade c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 15/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Tratamento correcto de load c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 16/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Representação multi-ciclo c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 17/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Ciclos 1 e 2 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 18/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Ciclos 3 e 4 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 19/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Ciclos 5 e 6 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 20/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Propagação de sinais de controlo c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 21/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados com controlo c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 22/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados com controlo: ciclos 1 e 2 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 23/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados com controlo: ciclos 3 e 4 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 24/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados com controlo: ciclos 5 e 6 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 25/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados com controlo: ciclos 7 e 8 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 26/52
Caminho de dados Exemplo de execução ciclo-a-ciclo Controlo da pipeline Caminho de dados com controlo: ciclo 9 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 27/52
Conflitos de dados Forwarding Protelamento Dependências de dados Dependência de dados: Uma instrução j depende de uma instrução i se se verificar alguma das seguintes condições: a instrução i produz um resultado que pode ser usado pela instrução j; a instrução j depende da instrução k, que por sua vez depende de i. Uma verdadeira dependência de dados implica fluxo de informação. Dependências de dados são propriedades de programas. Se a dependência provoca ou não um conflito (e o conflito um protelamento), depende das características da pipeline. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 28/52
Conflitos de dados Forwarding Protelamento Dependências de dados: exemplo sub $2, $1, $3 ; escrita em $2 and $12, $2, $5 ; 1 o operando depende de sub or $13, $6, $2 ;2 o operando depende de sub add $14, $2, $2 ; os 2 operandos dependem de sub sw $15, 100($2) ; base despende de sub Acessos simultâneos para leitura e escrita ao mesmo registo: o valor lido já é o novo valor do registo (válido para a pipeline usada nos exemplos). A escrita é efctuada na primeira metade do ciclo, a leitura na segunda. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 29/52
Conflitos de dados Forwarding Protelamento Dependências de dados: exemplo (cont.) c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 30/52
Conflitos de dados Forwarding Protelamento Dependências de dados: proibição O problema dos conflitos causados por dependência de dados pode ser evitado proibindo o compilador de gerar sequências de instruções que causem conflitos. sub $2, $1, $3 nop nop and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) Voilà... Não assegura a compatibilidade binária. (Porquê?) c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 31/52
Conflitos de dados Forwarding Protelamento Análise dos conflitos Para a pipeline de 5 andares que temos vindo a estudar, existem as seguintes situações de conflito: 1a. EX/MEM.RegRD = ID/EX.RegRS 1b. EX/MEM.RegRD = ID/EX.RegRT 2a. MEM/WB.RegRD = ID/EX.RegRS 2b. MEM/WB.RegRD = ID/EX.RegRT Para o fragmento de código das transparências anteriores: sub-and: tipo 1a: EX/MEM.RegRD=ID/EX.RegRS=$2; sub-or: tipo 2b: MEM/WB.RegRD=ID/EX.RegRT=$2; sub-add: não existem conflitos; sub-sw:não existem conflitos. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 32/52
Conflitos de dados Forwarding Protelamento Atalhos Caso as dependências sejam apenas para o futuro : implementar atalhos entre origem e destino (forwarding). c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 33/52
Conflitos de dados Forwarding Protelamento Controlo dos multiplexadores de forwarding A implementação dos atalhos para instruções do tipo R pode ser feita com dois multiplexadores 3:1 (de 32 bits). ForwardA ForwardB 00 ID/EX 00 ID/EX 01 EX/MEM 01 MEM/WB 10 MEM/WB 10 EX/MEM EX/MEM.RegWrite & EX/MEM.RegRD!=0 & EX/MEM.RegRD=ID/EX.RegRS => ForwardA=10 EX/MEM.RegWrite & EX/MEM.RegRD!=0 & EX/MEM.RegRD=ID/EX.RegRT => ForwardB=10 MEM/WB.RegWrite & MEM.RegRD!=0 & EX/MEM.RegRD!= ID/EX.RegRS & MEM/WB.RegRD=ID/EX.RegRS => ForwardA=01 MEM/WB.RegWrite & MEM.RegRD!=0 & EX/MEM.RegRD!= ID/EX.RegRS & MEM/WB.RegRD=ID/EX.RegRT => ForwardB=10 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 34/52
Conflitos de dados Forwarding Protelamento Caminho de dados com atalhos Versão simplificada do caminho de dados com atalhos para operações do tipo R: c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 35/52
Conflitos de dados Forwarding Protelamento Atalhos não resolvem todos os problemas Problema: Usar um registo após load. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 36/52
Conflitos de dados Forwarding Protelamento Detecção de confitos Solução: Protelar o processamento da instrução dependente. necessidade de uma unidade de detecção de conflitos; a detecção pode ser feita no andar ID (neste caso); quando uma instrução é protelada neste andar, a instrução em IF também deve ser protelada: o PC e IF/ID não devem mudar. Condição de protelamento: ID/EX.MemRead & (ID.EXRegRT = IF/ID.RegRS ID.EX.RegRT=IF/ID.RegRT) c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 37/52
Conflitos de dados Forwarding Protelamento Inserir bolhas Funcionamento real: c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 38/52
Conflitos de dados Forwarding Protelamento Tratamento de conflitos: implementação Versão simplificada da pipeline: c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 39/52
Conflitos de dados Forwarding Protelamento Protelamento: ciclos 2 e 3 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 40/52
Conflitos de dados Forwarding Protelamento Protelamento: ciclos 4 e 5 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 41/52
Conflitos de dados Forwarding Protelamento Protelamento: ciclos 6 e 7 c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 42/52
Efeitos de conflitos de controlo Mitigação de efeitos Impacto de um conflito de controlo c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 43/52
Efeitos de conflitos de controlo Mitigação de efeitos Saltos não tomados Assumir que o salto não é tomada e continuar com as instruções seguintes (textualmente). Se o salto é tomado, as instruções subsequentes já em tratamento devem ser anuladas. Anular uma instrução = valores de controlo a 0 (para a implementação usada). O destino do salto é determinadao no andar MEM: as intruções nos andares IF, ID e EX devem ser anuladas. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 44/52
Efeitos de conflitos de controlo Mitigação de efeitos Redução do tempo tratamento de saltos Reduzir o tempo de tratamento de saltos tem impacto directo sobre o desempenho da pipeline. Passar a determinação do próximo valor de PC para EX. Melhor: passar para o andar ID! Fácil: cálculo do endereço de salto (mudar somador de MEM para ID). Difícil: determinar se salto deve ser efectuado: unidade de comparação em ID (fazer OU bit-a-bit seguido de AND de todos os bits do resultado). Anular IF: basta pôr zeros no IR (nop=sll $0,$0,$0) c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 45/52
Efeitos de conflitos de controlo Mitigação de efeitos Tratamento de saltos: implementação c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 46/52
Efeitos de conflitos de controlo Mitigação de efeitos Tratamento de saltos: execução c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 47/52
Efeitos de conflitos de controlo Mitigação de efeitos Previsão dinâmica de saltos Abordagem possível: Dado o endereço de uma instrução de salto (i.e. a sua posição em memória), verificar se o salto foi tomado na última execução; se foi, executar instruções a partir da posição de destino usada anteriormente. Implementação: tabela indexada pelos bits menos significativos contendo 1 bit a indicar se o salto foi tomado ou não. Se foi tomado, a execução pode continuar mal tenha sido calculado o endereço de destino. A tabela é acedida durante IF. Debilidade: o que acontece a um salto condicional no fim de um ciclo? c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 48/52
Efeitos de conflitos de controlo Mitigação de efeitos Previsão dinâmica de saltos: esquema de 2 bits Para remediar a debilidade anterior, usam-se esquemas com 2 bits. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 49/52
Efeitos de conflitos de controlo Mitigação de efeitos Previsão dinâmica de saltos: benchmarks Resultados empíricos para tabela de 4096 posições (esquema de 2 bits) comparados com tabela infinita. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 50/52
Efeitos de conflitos de controlo Mitigação de efeitos Delay slots O conflito de controlo passa de hazard feature. A instrução textualmente a seguir a uma instrução de salto condicional é sempre executada. Para o nossa implementação (com uma penalidade de um ciclo), a situação fica resolvida. O trabalho de previsão é passado para o compilador. Tem vindo a perder popularidade: um delay slot não ajuda muito o desempenho das arquitecturas com muitos andares de pipeline. c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 51/52
Efeitos de conflitos de controlo Mitigação de efeitos Delay slots: exemplo c JCF, 2004 ASPD (FEUP/LEEC) Pipelines 52/52