Arquitetura de Computadores II Bacharelado em Ciência da Computação DCC - IM/UFRJ Prof.: Gabriel P. Silva Data: 18/04/2005 1 ª Lista de Exercícios de Arquitetura de Computadores II 1) Enumere e dê exemplo dos tipos de conflitos que podem ocorrer em um pipeline de instruções de um processador. 2) O tempo de execução dos estágios de um pipeline são os seguintes: a. busca da instrução: 2 ns b. decodificação/leitura dos registradores: 3 ns c. execução/cálculo do endereço: 2,5 ns d. acesso à memória: 4 ns e. escrita do resultado: 3,5 ns Qual será o tempo de ciclo do relógio do processador? 3) Considere a execução do seguinte código em um pipeline de 5 estágios como definido na questão anterior: dadd R5, R6, R7 ld R6, 100(R7) dsub R7, R6, R8 dadd R7, R7, 1 sd 100(R7), R6 Quantos ciclos serão gastos para executar este código se não houver adiantamento de dados? E com adiantamento de dados? E se o processador possuir caches separadas para dados e instruções? 4) Considere a execução do seguinte código, com o mesmo pipeline descrito na questão anterior: Início: dadd R1, R2, R3 dadd R4, R5, R6 dadd R7, R8, R9 dadd R10, R11, R12 dadd R13, R14, R15 Se no primeiro ciclo a instrução correspondente ao label Início está sendo buscada, quais os registradores que estarão sendo lidos no quarto ciclo de execução,? Quais estarão sendo escritos? 5) Defina os conceitos de arquitetura VLIW, superpipelined e superescalar dos modernos processadores. 6) Dado um processador MIPS64 com um pipeline de 5 estágios, escreva um trecho de código em linguagem de montagem do MIPS64 em que ocorram as seguintes situações: a. Adiantamento de dados da saída para a entrada da ALU; b. Adiantamento de dados da saída do estágio de memória para a entrada da ALU; c. Uma bolha no pipeline devido a uma dependência de controle.
7) Considere o seguinte trecho de código em linguagem de montagem: dadd R5, R0, R0 daddi R20, R0, #400 Soma: ld R10, 1000(R20) dadd R5, R5, R10 dsubi R20, R20, #4 bnez R20, Soma Assuma que o pipeline do processador não possui mecanismos de stalls ou adiantamento de dados. Reescreva o código inserindo o menor número possível de nops para eliminar as dependências de dados. Se for possível, reordene as instruções para minimizar o número de nops (as instruções podem ser reordenadas desde que se preserve a equivalência semântica). 8) Considere o seguinte trecho de código: COPIA: ld R10, 1000(R20) sd R10, 2000(R20) dsubi R20, R20, 4 bnez R20, COPIA Assuma que o pipeline do processador não possui mecanismos de stalls ou adiantamento de dados. a) Reescreva o código inserindo o menor número de nops necessários; reordene as instruções, se possível, para minimizar o número de nops preservando a equivalência semântica. b) Escreva uma fórmula para o número de ciclos necessários para executar este laço como uma função de N (número de palavras copiadas), ou seja, se forem copiadas N palavras quantos ciclos serão necessários? 9) Considere o seguinte laço: dadd sd dsub ld dadd slt bnez R8, R18, R19 R6, 4(R12) R6, R15, R8 R5, 36(R4) R4, R5, R8 R5, R2, R7 R5, rotulo Encontre as dependências de dados existentes no código acima. Para um pipeline do MIPS64 com interlock por hardware, mostre as bolhas criadas no pipeline. 10) No escalonamento com o uso da técnica de trace scheduling descreva os principais tipos de reparo de código que precisam ser feitos com a movimentação de instruções além das fronteiras do bloco. 11) Compute o tempo de execução (em ciclos de relógio) para os dois programas descritos a seguir: Calcule o desempenho do pipeline do MIPS64 com adiantamento de dados nos dois casos. É possível melhorar este desempenho? Em caso positivo, como e de quanto se pode melhorar o desempenho dos dois programas?
Prog1: daddi R2, R0, 300 ld R1, 100(R0) daddi R3, R0, 200 seq R15, R1, R3 beqz R15, end1 dadd R1, R1, R2 end1: sd R1, 100(R0) daddi R4, R0, 600 daddi R5, R0, 700 dadd R4, R4, R5 daddi R6, R0, 800 dsub R4, R4, R6 Progr2: daddi R1, R0, #0 daddi R3, R0, #1 loop: ld R1, 100(R0) ld R2, 200(R0) dadd R1, R1, R2 sd R1, 200(R0) dadd R1, R1, R3 seqi R8, R1, #3 bltz R8, loop 12) Relacione os problemas que impedem que o pipeline obtenha a sua eficiência máxima na execução de um programa? 13) Quando acontece e como pode ser eliminado o conflito estrutural? 14) Descreva os tipos de dependências de dados, como e quando elas ocorrem e quais as técnicas para resolvê-las por hardware e por software? Que tipo(s) de dependência é(são) eliminada(s) com o renomeação de registradores? 15) Descreva as técnicas empregadas na resolução do conflito de controle, indicando quais são realizadas pelo compilador e quais pelo hardware (CPU). Comente as vantagens e desvantagens de cada técnica. 16) Descreva o funcionamento do branch target buffer, considerando as vantagens em usá-lo (considere o uso de 2 bits em cada entrada do buffer para previsão de desvio, mostrando a máquina de estados). Qual a vantagem dese usar um único bit ou dois bits na máquina de estados para a previsão de desvios? 17) Quando é necessário anular resultados de instruções já ou parcialmente executadas? 18) Qual a diferença entre modelo de exceção precisa e imprecisa? 19) Quais as diferenças entre os processadores com arquiteturas RISC e aquelas com arquitetura CISC? 20) Descreva quais as vantagens e desvantagens de um processador realizar o acesso à memória através de apenas dois tipos de instruções: load e store? 21) Porque a implementação eficiente de pipelines só é possível em máquinas RISC?
22) Assuma que um programa tem um profile de execução onde 80% das instruções são simples (tais como AND, XOR, DADD e BEQZ) e o restante 20% são instruções complexas (tais como DMUL e DDIV). Adicionalmente considere que que as instruções simples precisam de 4 ciclos de máquina e as complexas precisam de 8 ciclos em uma máquina CISC (cada ciclo = 100 ns). Em uma máquina RISC, as instruções simples serão executadas em 1 ciclo, enquanto que as instruções complexas deverão ser simuladas por software necessitando, em média, 14 ciclos por instrução. Devido a sua simplicidade o tempo de ciclo em uma máquina RISC é de 70 ns. A máquina RISC será mais rápida que a CISC para na execução do programa mencionado? 23) Descreva as principais características das arquiteturas VLIW? 24) Quais as principais diferenças entre as arquiteturas superescalares e as VLIW? 25) Descreva as principais características do multithreading simultâneo? 26) Uma tabela de histórico de desvios (BHT) é uma pequena memória colocada no estágio de busca de instruções, indexada pelos bits mais baixos do endereço da instrução que está sendo buscada. Cada entrada na BHT codifica a predição do resultado da próxima execução de qualquer instrução de desvio que indexe essa entrada na tabela. i) Desenhe um diagrama de estados para um preditor bimodal e explique seu funcionamento. ii) Discuta a acurácia de predição desse esquema para um desvio no final de um loop. iii) Discuta a acurácia da predição de desvio se o preditor for de um bit. 27) Um processador em particular utiliza uma BTAC para reduzir os efeitos das dependências de controle no seu pipeline de instruções. A BTAC está organizada como uma cache de mapeamento direto com 16 conjuntos. Um programa em execução nesse processador contém desvios condicionais nos endereços 0x00004444, 0x, 0x0011CC48 e 0x00550000. a) Indique para que posições da BTAC cada uma dessas instruções é mapeada Cada conjunto nesta BTAC tem espaço para armazenar um rótulo, o endereço destino do desvio e um bit de histórico. Um desvio em particular é colocado na BTAC quando o desvio é tomado pela primeira vez, quando então o bit de histórico recebe o valor T (de tomado). Desse ponto em diante, o bit de histórico é atualizado dinamicamente para refletir o comportamento do desvio. Se houver uma falha na BTAC, a predição feita é que o desvio não irá ocorrer. b) Assuma que a BTAC está inicialmente vazia. O processador encontra as instruções especificadas anteriormente, na ordem mostrada na tabela abaixo. O resultado real de cada instrução de desvio é mostrado na última coluna à direita. Complete esta tabela, preenchendo as colunas do meio. Justifique baseado no conteúdo da BTAC. c) Como você modificaria a BTAC para diminuir ainda mais o custo dos desvios preditos corretamente?
Endereço do Desvio BTAC hit / miss Predição da BTAC (tomado ou não tomado) Resultado Real do Desvio Desvio tomado Desvio não tomado 00004444 Desvio não tomado 00004444 Desvio tomado Desvio tomado 00004444 Desvio tomado 00550000 Desvio tomado Desvio não tomado 00550000 Desvio não tomado 28) Considere o trecho de código abaixo: LOOP: dadd R2, R3, R10 /* I1 r2=r3+r10 sd R11(r3), R2 /* I2 mem[r11+r3] = r2 dadd R8, R8, R2 /* I3 r8 = r8 + r2 dsll R10, R10, #1 /* I4 r10 = r10 << 1 dsrl R2, R8, #31 /* I5 r2 = r8 >> 31 bne R2, R0, ELSE /* I6 desvia se menor/igual dadd R2, R8, R2 /* I7 r2 = r8 + r2 dsrl R12, r2, #1 /* I8 r12 = r2 >> 1 j L1 /* I9 desvio incodicional ELSE: dsll R8, R9, #1 /* I10 r8 = r9 << 1 dadd R9, R9, R12 /* I11 r9 = r9 + r12 L1: dsub R2, R13, R3 /* I12 r2 = r13 - r3 dsub R3, R3, #1 /* I13 r3 = r3 1 sd R11(R2), R9 /* I14 mem[r11+r12] = r9 bne R9,R0, LOOP /* I15 desvia se menor/igual a) Divida o código em blocos básicos; b) Faça o grafo de dependências entre as instruções do trace I1-I5 e I10-I14. Indique as dependências falsas entre duas instruções apenas quando não houver uma dependência direta entre elas; c) Utilize os registradores de r14 em diante para, através de renomeação, eliminar as dependências falsas relevantes determinadas no item b); d) Utilize o algoritmo LIST SCHEDULING para realizar o escalonamento das instruções do trace do item c) considerando uma arquitetura VLIW, possuindo 2 ALU Inteiras, 1 Deslocador e 1 Unidade de Load/Store. Suponha que as instruções de Load/Store consomem 2 ciclos e que todas as demais consomem 1 ciclo;