A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Arquitectura de Computadores II Paulo Marques Departamento de Eng. Informática Universidade de Coimbra 2004/2005 3. Pipelining Avançado.

Apresentações semelhantes


Apresentação em tema: "Arquitectura de Computadores II Paulo Marques Departamento de Eng. Informática Universidade de Coimbra 2004/2005 3. Pipelining Avançado."— Transcrição da apresentação:

1 Arquitectura de Computadores II Paulo Marques Departamento de Eng. Informática Universidade de Coimbra pmarques@dei.uc.pt 2004/2005 3. Pipelining Avançado 3.1. Escalonamento Dinâmico

2 2 Pipelining Avançado?

3 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... CPI Pipeline = CPI Ideal + Structural_Hazzards + Data_Stalls + Control_Stalls

4 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 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 6 Primeiro tipo de limitações: Dados (Verdadeiras) Dependências de Dados Loop:LWR1, 0(R20) ADDUR2, R1, R4 SWR2, 80(R20) ADDIR20, R20, -8 BNER20, 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 7 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:LWR1, 0(R20) ADDUR2, R1, R4 SWR2, 80(R20) ADDIR20, R20, -8 LWR1, 0(R20) ADDUR2, R1, R4 SWR2, 80(R20) Antidependência Dependência de Saída

8 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 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

10 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 11 CDC 6600, Scoreboard & Seymour Cray CDC 6600, 1965

12 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 13 Novos conflitos de dados que podem surgir... WAR (Write-After-Read) WAW (Write-After-Write) DIV.DF0, F2, F4 ADD.DF10, F0, F8 SUB.DF8, F12, F14 DIV.DF0, F2, F4 ADD.DF10, F0, F8 SUB.DF0, 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 14 Aspecto de um Scoreboard para o MIPS (FP!) Mantém a informação sobre todas as instruções em execução

15 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 16 Componentes do Scoreboard Instruções Issued ou pending (Window) Unidades Funcionais Existentes Ocupada?OperaçãoRegisto Destino Registos Origem Quem produz regs. origemFi e Fj ready AND not read Escritas Pendentes

17 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 18 Scoreboard Example

19 19 Scoreboard Example: Cycle 1

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

21 21 Scoreboard Example: Cycle 3 Issue MULT?

22 22 Scoreboard Example: Cycle 4

23 23 Scoreboard Example: Cycle 5

24 24 Scoreboard Example: Cycle 6

25 25 Scoreboard Example: Cycle 7

26 26 Scoreboard Example: Cycle 8a

27 27 Scoreboard Example: Cycle 8b

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

29 29 Scoreboard Example: Cycle 10

30 30 Scoreboard Example: Cycle 11

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

32 32 Scoreboard Example: Cycle 13

33 33 Scoreboard Example: Cycle 14

34 34 Scoreboard Example: Cycle 15

35 35 Scoreboard Example: Cycle 16

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

37 37 Scoreboard Example: Cycle 18

38 38 Scoreboard Example: Cycle 19

39 39 Scoreboard Example: Cycle 20

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

41 41 Scoreboard Example: Cycle 22

42 42 Skip a couple of cycles...

43 43 Scoreboard Example: Cycle 61

44 44 Scoreboard Example: Cycle 62

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

46 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 47 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 LWR1, 0(R20) ADDUR2, R1, R4 SWR2, 80(R20) ADDIR20, R20, -8 LWR1, 0(R20) ADDUR2, R1, R4 SWR2, 80(R20) LWR1, 0(R20) ADDUR2, R1, R4 SWR2, 80(R20) ADDIR20, R20, -8 LWR1, 0(R20) ADDUR10, R1, R4 SWR10, 80(R20)

48 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 49 Estrutura do Hardware de Tomasulo

50 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.

51 51 The Devil is in the Details... This is a picture of someone murdering Tomasulo, whose algorithm is thoroughly inexplicable... (http://www.llamas.org/notes/cmsc411.html)

52 52 Material para ler Computer Architecture: A Quantitative Approach Secções 3.1 e 3.2 Ao ler 3.2, ler apenas até ao Algoritmo de Tomasulo Apêndice A.8 Contém o algoritmo/estrutura utilizado no Scoreboard A restante parte da Secção 3.2 Contém um overview do Algoritmo de Tomasulo

53 Arquitectura de Computadores II Paulo Marques Departamento de Eng. Informática Universidade de Coimbra pmarques@dei.uc.pt 2004/2005 3. Pipelining Avançado 3.2. Redução do Custo dos Saltos

54 54 Onde estamos nós? Num pipeline profundo, é essencial reduzir o custo dos saltos!!!

55 55 Reduzir a penalidade nos saltos Se um pipeline é profundo, o número bolhas que um salto potencialmente introduz é bastante elevado Se falamos de um processador multi-issue (capaz de fazer o issue de mais do que uma instrução por ciclo de relógio), então saltos surgem N vezes mais depressa! A ideia base é prever dinamicamente qual a direcção que um salto condicional toma

56 56 Branch Prediction Buffer / Branch History Table 0 Branch History Table 123456789ABCDEF 0110010101000100 ADDIR2, R0, 5 BNE R0, R2, 0xA14FC326 ADDIR6, R7, R8 0  Not Taken 1  Taken Lookup Último: NOT TAKEN; faz fetch da instrução seguinte 1004

57 57 Branch Prediction Buffer / Branch History Table 0 Branch History Table 123456789ABCDEF 0110110101000100 ADDIR2, R0, 5 BNE R0, R2, 0xA14FC326 ADDIR6, R7, R8 0  Not Taken 1  Taken Quando descobre que se enganou, actualiza a entrada correcta, elimina as instruções erradas do pipeline e recomeça o fetch de 0xA14FC326

58 58 Demasiado simplista... Suponhamos um salto. Mesmo que este seja quase sempre tomado (e.g. um ciclo for ou while), quase de certeza que o mesmo é previsto incorrectamente duas vezes (em vez de uma) quando o mesmo não é tomado for (i=0; i<10; i++) {... } Ao executar repetidamente a previsão fica Taken Na última iteração, a previsão é errada (inevitável) Ao voltar a entrar, a previsão é NOT Taken, mas a “nova” primeira iteração vai quase se certeza ser Taken!!! Num ciclo de 10 iterações, previmos erradamente duas: 20%!!

59 59 2-bit Predictor Tem de falhar pelo menos duas vezes antes da previsão ser alterada

60 60 Buffer de 4K vs. Buffer Infinito O factor limitante não é o tamanho do buffer, é a qualidade das previsões!

61 61 Correlating Branch Predictors if (x == 10) { specialCase = true; } (...) if (specialCase) { (...) } Estes saltos estão correlacionados! Nenhum esquema “simples” como o anterior consegue capturar o comportamento deste tipo de código!

62 62 Correlating Branch Predictors NT/NTNT/TT/NTT/T

63 63 Performance Global Tournament Predictors [Ideia]: Para cada salto, utilizar diferentes predictors, consoante o qual seja melhor para o salto em causa...

64 64 Branch-Target Buffer Os Branch Predictors predizem de forma bastante adequada se um salto vai ocorrer ou não. Mas, caso este ocorra, como é que eu sei de ir buscar a próxima instrução (fetch)? Calcular o endereço de destino (PC+offset) pode ser demasiado longo; O endereço de destino pode estar num registo (salto indirecto) Solução: Utilizar uma cache de saltos anteriores!

65 65 Branch-Target Buffer (BTB)

66 66 Uso do Branch Target Buffer Instr. no buffer? PrevisãoSalto Penalidade (Ciclos) SIMTAKEN 0 SIMTAKEN NOT TAKEN 2 NÃO--TAKEN2 NÃO-- NOT TAKEN 0

67 67 Return Branch Predictors Sempre que é chamada uma rotina, o return é um salto indirecto. No entanto, se a rotina é chamada de diferentes locais, o PC destino é variável. A performance de um Branch Target Buffer não será muito boa Utiliza-se uma cache em forma de stack em que sempre que é feita uma chamada, é guardado o endereço de retorno! (ATENÇÃO: Isto não é o stack normal do programa!!!)

68 68 Material para ler Computer Architecture: A Quantitative Approach Secções 3.4 e 3.5 Ler “rapidamente” a parte “Integrated Instruction Fetch Units” mas dando atenção à parte de “Instruction Prefetch”

69 Arquitectura de Computadores II Paulo Marques Departamento de Eng. Informática Universidade de Coimbra pmarques@dei.uc.pt 2004/2005 3. Pipelining Avançado 3.3. Processadores Multi-Issue

70 70 Pipelining Avançado Scoreboarding / Tomasulo Objectivo: CPI = 1(IPC = 1) Processadores Actuais (Multi-Issue) Objectivo: CPI 1) Processadores Multi-Issue Super-escalares [e.g. Intel Pentium 4, AMD Opteron] Very Large Instruction Word (VLIW) [e.g. Intel Itanium2]

71 71 Nomenclatura Processador Front-end FU1FU2FU3FU4FU5FU6 Memória Back-end FSB = Front-Side Bus IF / ID / Issue Execute / Commit

72 72 Super-escalares vs. VLIW Instrução 1 Instrução 2 Instrução 3 Instrução... Instrução N Integer Unit 1 Integer Unit 2 FP Unit 1 FP Unit 2 Processor Frontend INT1INT2FP1FP2 INT1INT2FP1FP2 INT1INT2FP1FP2 INT1INT2FP1FP2 INT1INT2FP1FP2 Integer Unit 1 Integer Unit 2 FP Unit 1 FP Unit 2 Processor Frontend

73 73 Super-escalares vs. VLIW (típicos) Super-Escalares Escalonamento dinâmico, baseado no hardware Out-of-order execution Hardware mais complicado Compiladores “relativamente” simples Melhor adaptados ao ILP existente VLIW (ou EPIC na terminologia Intel/HP) Escalonamento estático, baseado em software In-order Execution Hardware mais simples Compiladores evoluídos Tipicamente não muito bem adaptados ao ILP existente (problemas de largura de banda com a memória e da explosão do tamanho dos programas)

74 74 Aspecto de um pipeline MIPS super-escalar estático IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB IFIDEXEMEMWB INT Op FP Op INT Op FP Op INT Op FP Op INT Op FP Op INT Op FP Op

75 75 Pipeline Super-escalar c/ Escalonamento Dinâmico Re-order buffer (ROB)

76 76 Questão O que é que acontece com as operações de load/store para memória? Como é que apenas existe “commit” no final?

77 77 E o que acontece nos saltos? Se temos um processador N multi-issue, isso quer dizer que os saltos chegam N vezes mais depressa! 4 ou mais em processadores modernos... O tamanho médio de um bloco básico é 4 a 7 instruções! Necessidade de “ajuda” do compilador devido a um overhead demasiado grande dos saltos e a estes surgirem “demasiado rápido” Conclusão: “simplesmente” prever os saltos já não é suficiente! Execução Especulativa

78 78 Hardware de Tomasulo com o ROB No algoritmo de Tomasulo, assim que uma instrução escrevia um resultado, todas as outras viam-no no register file. Com o ROB, os registos só são actualizados quando uma instrução já não é especulativa!

79 79 Material para ler Computer Architecture: A Quantitative Approach Secções 3.6 e 3.7 Atenção: Não vimos em profundidade as alterações necessárias ao Algoritmo de Tomasulo para termos execução especulativa


Carregar ppt "Arquitectura de Computadores II Paulo Marques Departamento de Eng. Informática Universidade de Coimbra 2004/2005 3. Pipelining Avançado."

Apresentações semelhantes


Anúncios Google