1 / 79

3. Pipelining Avançado 3.1. Escalonamento Dinâmico

3. Pipelining Avançado 3.1. Escalonamento Dinâmico. Pipelining Avançado?. Instruction Level Parallelism. Explorar o potencial paralelismo existente numa sequência (fluxo) de instruções (...) a = x + y; b = x - y; c = x*x + y*y; (...)

thanos
Télécharger la présentation

3. Pipelining Avançado 3.1. Escalonamento Dinâmico

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3. Pipelining Avançado3.1. Escalonamento Dinâmico

  2. Pipelining Avançado?

  3. Instruction Level Parallelism • Explorar o potencial paralelismo existente numa sequência (fluxo) de instruções (...) a = x + y; b = x - y; c = x*x + y*y; (...) • Existem duas grandes abordagens para explorar ILP: • Dinâmicas  Baseadas em Hardware • Estáticas  Baseadas em Software (Compilador) • Limitações ao ILP... • CPIPipeline = CPIIdeal + Structural_Hazzards + Data_Stalls + Control_Stalls

  4. Paralelismo Disponível • Bloco Básico: Uma sequência “limpa” de instruções sem saltos (excepto para a sua entrada e no seu ponto de saída) Loop: L.D F0, 0(R1) ADD.D F4, F0, F2 S.D F4, 0(R1) DADDUI R1, R1, -8 BNE R1, R2, Loop • Tamanho médio de um bloco básico em programas MIPS: • 4 a 7 instruções!!! • É necessário haver técnicas para explorar o paralelismo para além de blocos básicos!

  5. Como ir além dos blocos básicos? • Exemplo: Loop Unrolling • Este tipo de operações pode ser feito... • Pelo compilador (e.g. gcc m.c -funroll-loops matrix.c -o m; instruções vectoriais) • Pelo processador (escalonamento dinâmico, processadores vectoriais) for (i=0; i<N; i++) x[i] = y[i] + 5; for (i=0; i<N; i+=4) { x[i] = y[i] + 5; x[i+1] = y[i+1] + 5; x[i+2] = y[i+2] + 5; x[i+3] = y[i+3] + 5; }

  6. Primeiro tipo de limitações: Dados • (Verdadeiras) Dependências de Dados Loop: LW R1, 0(R20) ADDU R2, R1, R4 SW R2, 80(R20) ADDI R20, R20, -8 BNE R20, R6, Loop • Para o programa executar correctamente, as instruções em causa têm de ser executadas na sequência em que aparecem • Não podem executar fora de ordem ou ao mesmo tempo! • É difícil de lidar com dependências que envolvam de memória

  7. Antidependência Dependência de Saída Dependências de Nome • Dependências de Nome: ocorrem quando sequências de instruções utilizam os mesmos registos sem que exista verdadeiro fluxo de dados entre elas • As dependências de nome são resolúveis alterando o nome dos registos (register renaming) Loop: LW R1, 0(R20) ADDU R2, R1, R4 SW R2, 80(R20) ADDI R20, R20, -8LW R1, 0(R20) ADDU R2, R1, R4 SW R2, 80(R20)

  8. Data Hazzards • RAW: Read after Write • Uma instrução tenta ler os dados antes da instrução que os produz os escrever • Verdadeiras dependências de dados; a ordem tem de ser preservada; uso de forwarding ou introdução de stalls • WAW: Write after Write • Uma instrução tenta escrever os seus dados quando uma anterior ainda não o fez • Não pode ocorrer no pipeline simples dos MIPS • WAR: Write after Read • Uma instrução tenta escrever os seus dados num destino antes de uma instrução anterior ter oportunidade de usar os dados nesse destino • Tipicamente só ocorre se as instruções não forem executadas em ordem

  9. Segundo tipo de limitações: Controlo • Uma instrução que tem uma dependência de controlo relativamente a um salto não pode ser movida para antes do salto • Uma instrução que não tem uma dependência de controlo relativamente a um salto não pode ser movida para depois do salto (de forma a que já não é controlada pelo mesmo) if (cond1) { S1; } if (cond2) { S2; } Dependência de controlo Dependência de controlo

  10. Qual é a relevância de tudo isto? • Nós não queremos preservar a ordem de execução das instruções... • Nós não queremos apenas executar saltos e instruções que existam apenas no programa... • Para a execução do programa ser correcto, tudo o que tem de ser preservado é: • Os fluxos de dados existentes no programa original • O comportamento nos casos em que existam excepções Um processador de elevada performance pode: - Executar instruções fora de ordem!!! - Executar instruções especulativamente que nunca deveriam ser executadas!!!

  11. CDC 6600, Scoreboard & Seymour Cray • CDC 6600, 1965

  12. Escalonamento Dinâmico com um Scoreboard • Divide-se a fase ID em duas: • Issue: Descodificação da instrução e verificação de dependências estruturais • Read Operands: Espera até que não existam dependências de dados e então lê os operandos • In-order issue • Assim que as dependências estão resolvidas, a instrução é enviada para uma unidade funcional disponível • As instruções podem “ultrapassar-se” na parte de leitura de operandos • Out-of-order Execution / Completion • As instruções começam a executar assim que já não existam dependências de dados (nem estruturais!) • Out-of-order Execution => Out-of-order Completion

  13. Novos conflitos de dados que podem surgir... • WAR (Write-After-Read) • WAW (Write-After-Write) DIV.D F0, F2, F4 ADD.D F10, F0, F8 SUB.D F8, F12, F14 DIV.D F0, F2, F4 ADD.D F10, F0, F8 SUB.D F0, F8, F14 • - O scoreboard têm de lidar com estes problemas • -- Objectivo do scoreboard: executar uma instrução quão cedo • quanto possível, desde que não hajam dependências

  14. Mantém a informação sobre todas as instruções em execução Aspecto de um Scoreboard para o MIPS (FP!)

  15. Operação do “Novo” Pipeline • IF – Instrucution Fetch (Vai buscar a instrução à memória) • IS – Issue • Se existe uma unidade funcional livre para a instrução E nenhuma outra instrução irá escrever no endereço destino da instrução então a instrução é enviada para a unidade funcionar e o Scoreboard actualizado (resolve WAW) • RD – Read Operands • O Scoreboard verifica quando é que os operandos da instrução ficam disponíveis (i.e. nenhuma outra instrução tem uma escrita pendente). Quando estão disponíveis, o Scoreboard informa a unidade funcional que pode prosseguir com a leitura (resolve RAW) • EX – Execution • A unidade funcional executa a operação. Quando a operação completa, a mesma informa o Scoreboard • WR – Write Result • O Scoreboard verifica se não existem conflitos WAR (i.e. instruções pendentes que ainda não leram os registos necessários – dados de outras instruções anteriores – numa altura em que estamos a tentar escrever). Quando não existem, o Scoreboard informa a unidade funcional que pode escrever o registo destino

  16. Escritas Pendentes Unidades Funcionais Existentes Instruções Issued ou pending (Window) Registos Origem Quem produz regs. origem Fi e Fj readyAND not read Ocupada? Operação Registo Destino Componentes do Scoreboard

  17. Vamos a um exemplo... • Os slides seguintes foram obtidos de: CS 505: Computer Architecture Spring 2005 (c) Thu D. Nguyen http://paul.rutgers.edu/courses/cs505/s05/

  18. Scoreboard Example

  19. Scoreboard Example: Cycle 1

  20. Scoreboard Example: Cycle 2 • Issue 2nd LD?

  21. Scoreboard Example: Cycle 3 • Issue MULT?

  22. Scoreboard Example: Cycle 4

  23. Scoreboard Example: Cycle 5

  24. Scoreboard Example: Cycle 6

  25. Scoreboard Example: Cycle 7

  26. Scoreboard Example: Cycle 8a

  27. Scoreboard Example: Cycle 8b

  28. Scoreboard Example: Cycle 9 Note Remaining • Read operands for MULT & SUB? Issue ADDD?

  29. Scoreboard Example: Cycle 10

  30. Scoreboard Example: Cycle 11

  31. Scoreboard Example: Cycle 12 • Read operands for DIVD?

  32. Scoreboard Example: Cycle 13

  33. Scoreboard Example: Cycle 14

  34. Scoreboard Example: Cycle 15

  35. Scoreboard Example: Cycle 16

  36. WAR Hazard! Scoreboard Example: Cycle 17 • Why not write result of ADD???

  37. Scoreboard Example: Cycle 18

  38. Scoreboard Example: Cycle 19

  39. Scoreboard Example: Cycle 20

  40. Scoreboard Example: Cycle 21 • WAR Hazard is now gone...

  41. Scoreboard Example: Cycle 22

  42. Skip a couple of cycles...

  43. Scoreboard Example: Cycle 61

  44. Scoreboard Example: Cycle 62

  45. Review: Scoreboard Example: Cycle 62 • In-order issue; out-of-order execute & commit

  46. Pontos chave da técnica Scoreboarding • In-order Issue, Out-of-order Execution and Completion • Se não é possível fazer o Issue, todo o pipeline pára • Tamanho do buffer entre a fase IF e ISSUE • Limitações • ILP disponível num bloco básico (verdadeiras dependências) • Tamanho da janela do Scoreboard • Tipo e número de unidades funcionais disponíveis • Presença de anti-dependências e dependências de saída

  47. LW R1, 0(R20)ADDU R2, R1, R4SW R2, 80(R20) ADDI R20, R20, -8LW R1, 0(R20)ADDU R10, R1, R4SW R10, 80(R20) LW R1, 0(R20)ADDU R2, R1, R4SW R2, 80(R20) ADDI R20, R20, -8LW R1, 0(R20)ADDU R2, R1, R4SW R2, 80(R20) Processadores Modernos... • Utilizam uma forma avançada de Scoreboarding • Algoritmo de Tomasulo (IBM 360/91) • Ideias base: • Verifica quando os operandos das instruções estão disponíveis (semelhante ao Scoreboard  Reais dependências de dados) • Register Renaming para evitar WAR e WAW

  48. Componentes do Hardware de Tomasulo • Múltiplas Unidades Funcionais • Reservation Stations (RS) • Mantêm os operandos aguardando ser lançados • Fazem a gestão local do lançamento • Common Data BUS (CDB) • Os dados vão directamente para as reservation stations sem passar pelos registos Gestão distribuída dos dados

  49. Estrutura do Hardware de Tomasulo

  50. Algoritmo (Simplificado) • ISSUE • Obtêm a instrução da Instruction Queue e envia-a para a RS correcta (se disponível), com o valor dos operandos. Se os operandos não estão disponíveis, envia a instrução indicando as unidades funcionais que irão produzir os resultados. • Renomeia os registos de forma a evitar WAR e WAW! • EXECUTE • Se os operandos não estão disponíveis espera até que eles surgirem no CDB. Nessa altura, a instrução pode ser executada. Note-se que na mesma unidade funcional, esta execução não tem de ser em ordem. • Os conflitos RAW (verdadeiras dependências) são evitadas esperando até que os operandos estejam disponíveis. • WRITE RESULT • Quando uma instrução acaba de executar, o resultado é escrito no CDB. Isto implica que todas as RS que estejam à espera do resultado obtêm o valor. Os registos/memória também são escritos nesta altura.

More Related