• Nenhum resultado encontrado

b. Suponha que o número X de interações é múltiplo de 2, e considere que o código foi desenrolado como abaixo:

N/A
N/A
Protected

Academic year: 2021

Share "b. Suponha que o número X de interações é múltiplo de 2, e considere que o código foi desenrolado como abaixo:"

Copied!
8
0
0

Texto

(1)

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Arquiteturas de Computadores – Turma: B1 – GABARITO Lista 2 Profa.: Simone Martins

1. Considere que foi introduzida a seguinte mudança na arquitetura MIPS vista em sala de aula. Em uma instrução de desvio, os registradores são testados e o endereço que indica a próxima instrução a ser executada é carregado no PC após o segundo estágio do pipeline. Além disso, a instrução que segue uma instrução de desvio é sempre executada para preencher o slot de tempo que fica entre a instrução de desvio e a instrução que deve ser executada após o desvio. A instrução que vai ser executada depois do desvio é definida pelo montador MIPS que escolhe uma instrução que pode ser executada sem mudar a execução que o programador deseja do programa. Indique como modificar o código abaixo de modo a utilizar um slot de atraso introduzido devido à instrução beq. A modificação deve incluir mudança na ordem das instruções e modificação da instrução lw.

Loop: lw $2, 100($3)

addi $3, $3, 4

beq $3, $4, Loop

Resposta: A instrução lw ou addi deve ocupar o slot de atraso do desvio beq . Não podemos colocar addi no slot porque a instrução de desvio precisa comparar o registrador $ 3 com $ 4 e a instrução addi muda $ 3. Para mover lw para o slot de atraso do desvio, deve-se perceber que o registrador $ 3 terá mudado. Pode-se pensar esta modificação em dois passos. Primeiro, o código pode ser reescrito da seguinte maneira:

Loop: addi $3, $3, 4 lw $2, 96($3) beq $3, $4, Loop

Depois move-se lw para o slot de atraso do desvio:

Loop: addi $3, $3, 4 beq $3, $4, Loop lw $2, 96($3) 1. Considere o seguinte código: Loop: lw $t0, 0($s1)

add $t0, $t0,$s2

sw $t0, 0($s1)

addi $s1, $s1, –8 bne $s1, $zero, Loop

a. Calcule o número de ciclos de execução deste código considerando que serão executadas X iterações. Considere que a dependência de dados entre as instruções lw e outras instruções causa paradas e que o endereço a ser utilizado nas instruções de desvio é conhecido ao final do ciclo de execução.

Resposta: 9X

b. Suponha que o número X de interações é múltiplo de 2, e considere que o código foi desenrolado como abaixo:

Loop: lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1)

lw $t1, –4($s1) add $t1, $t1, $s2

(2)

sw $t1, –4($s1) addi $s1, $s1, –8 bne $s1, $zero, Loop

Reordene as instruções para que ele seja executado de forma mais rápida e calcule o número ciclos que serão necessários para execução deste programa. Compare o número de ciclos necessários para execução dos dois códigos.

Resposta: Uma possível solução: Loop: lw $t0, 0($s1) lw $t1, –4($s1) add $t0, $t0, $s2 add $t1, $t1, $s2 sw $t0, 0($s1) sw $t1, –4($s1) addi $s1, $s1, –8 bne $s1, $zero, Loop

Neste caso teremos 11X/2 ciclos. Comparando o desempenho: 9X/(11X/2)=18/11=1.64, ou seja, o desenrolar proveu uma melhora de desempenho

2. Considere uma arquitetura de processador em que cada instrução está disponível para ser executada em um ciclo de relógio e cada instrução necessita dos seguintes números de ciclo de relógio para finalizar sua instrução (latência da instrução):

LD - 4 DIVD – 12 MULTD - 5 ADDD – 1 ADDI - 0 SD - 1 SUB - 0 BNZ - 1

Considere também que uma instrução só pode começar a ser executada quando a outra acaba. Calcule o número de ciclos de relógio por iteração que serão utilizados para executar o código abaixo:

Loop: LD F2,0(Rx) DIVD F8,F2,F0 MULTD F2,F6,F2 LD F4,0(Ry) ADDD F4,F0,F4 ADDD F10,F8,F2 ADDI Rx,Rx,#8 ADDI Ry,Ry,#8 SD F4,0(Ry) SUB R20,R4,Rx BNZ R20,Loop

Resposta: O desempenho em ciclos, por iteração de loop, caso nenhuma nova instrução puder ser iniciada até a anterior ser concluída é 40. Cada instrução requer um ciclo de execução do relógio adicionado dos ciclos de latência especificados anteriormente. Por exemplo, LD necessita de 5 ciclos e ADDI de 1.

4. Considere uma nova arquitetura que detecta dependência de dados entre as instruções e não inicia a execução de uma nova instrução somente se ela depende do término da execução de uma instrução anterior. Mostre o código da questão anterior com as instruções de parada inseridas de modo que cada dependência de dados seja resolvida. Caso não haja dependência de dados, não é necessário inserir instruções de parada. Calcule o número de ciclos necessário para cada iteração nesta nova arquitetura. Resposta: Serão necessários 25 ciclos de relógio

(3)

5. Considere um processador projetado com múltiplas emissões, que possui dois pipelines de execução, cada um capaz de iniciar a execução de uma instrução por ciclo. Os resultados podem ser encaminhados imediatamente de um pipeline para outro ou para si mesmo. Um pipeline de execução somente é bloqueado se houver uma verdadeira dependência de dados. Calcule o número de ciclos que cada iteração do programa da questão 7 irá necessitar neste processador.

Resposta: Serão necessários 22 ciclos de relógio

6. Reordene as instruções do código da questão 3 para melhorar o desempenho da execução do programa. Calcule quantos ciclos por iteração serão necessários para executar o código reordenado no processador da questão anterior, levando em consideração as dependências de dados do novo código e as latências das unidades funcionais.

Resposta:

Uma possível reordenação do código onde serão necessários 20 ciclos de relógio.

7. Considere o código reordenado da questão anterior.

a) Indique a fração da quantidade total de ciclos não utilizados para iniciar uma instrução considerando os dois pipelines de execução

Resposta: 11 operações de 2x20 oportunidades=1-11/40=0,725 b) Reescreva o código, desenrolando cada iteração em 2 iterações

(4)

c) Indique a aceleração obtida dividindo o tempo do código reordenado pelo código reordenado desenrolado

Resposta:

Aceleração=tempo sem melhoramento/tempo com melhoramento=20/(22/2)=1.82

8. Uma maneira de fazer renomeação de registradores é designar o registrador destino de cada instrução a um registrador temporário diferente e depois verificar as dependências de dados verdadeiras e trocar os nomes dos registradores fonte das instruções para manter as dependências. Utilize esta técnica para o código abaixo, considerando que podem ser utilizados os registradores T9 até T63.

Loop: LD F4, 0(Rx) IO: MULTD F2,F0,F2 I1: DIVD F8,F4,F2 I2: LD F4,0(Ry) I3: ADDD F6,F0,F4 I4: SUBD F8,F8,F6

(5)

I5: SD F8,0(Ry)

Dica de como ficariam as duas primeiras instruções: Loop: LD T9, 0(Rx)

IO: MULTD T10,F0,F2 Resposta:

9. Considere o código abaixo que implementa a operação DAXPY=aX+Y, onde a é um escalar e X e Y são vetores de 100 posições: DADDIU R4,R1,#800 foo: L.D F2,0(R1) MUL.D F4,F2,F0 L.D F6,0(R2) ADD.D F6,F4,F6 S.D F6,0(R2) DADDIU R1,R1,#8 DADDIU R2,R2,#8 DSLTU R3,R1,R4 BNEZ R3,foo

Considere que as unidades funcionais possuem as latências em ciclos de relógio como mostrado na tabela abaixo. A latência indica quantos ciclos de relógio são necessários para uma instrução gerar o valor correto em um registrador para poder ser usado por outra instrução. Por exemplo, se uma instrução que realiza uma instrução de PF na ALU depende de uma instrução para gerar o conteúdo de um registrador que é uma multiplicação PF, a instrução só poderá ser carregada 5 ciclos de relógio após a execução da instrução de multiplicação. Assuma também que as instruções de desvio introduzem 1 ciclo de latência.

Instrução que produz o

resultado Instrução que usa o resultado Latência em ciclos de relógio Multiplicação PF Operação de PF na ALU 6

Soma PF Operação de PF na ALU 4

Multiplicação PF Armazenamento PF 5

Soma PF Armazenamento PF 4

Todas as operações com inteiros e carregamento da memória

Qualquer 2

a) Considere que o código irá ser executado em um processador com um único pipeline. Calcule o número de ciclos de relógio necessários para calcular um elemento de Y considerando dois casos: (i) o código é executado na forma original; (ii) o código é compilado e gerado de forma reordenada para diminuir a dependência dos dados. Calcule quanto mais rápido o relógio deve ser para atingir o desempenho obtido pelo compilador

(6)

Resposta:

O número de ciclos por iteração para o código não ordenado é 16 e para ordenado é 10, ou seja, 60% mais rápido. Então o relógio tem que ser 60% mais rápido para que o código não ordenado seja executado no mesmo tempo que o código ordenado na máquina original.

b) Para o mesmo processador acima, encontre o número de vezes necessário para desenrolar o laço para que não ocorram paradas. Mostre como ficaria o código desenrolado e quantidade de ciclos para gerar cada elemento.

(7)

O código deverá ser desenrolado 3 vezes.

c) Considere um processador VLIW que pode emitir, em cada ciclo de relógio, uma instrução com 5 operações: 2 referências à memória, 2 operações PF e uma operação com inteiros ou desvio. Desenrole o código em 6 vezes, e mostre o diagrama de execução neste processador VLIW. O diagrama deve conter em cada linha a indicação do ciclo de relógio, cada instrução de referência de memória, cada instrução PF e cada instrução inteira ou de desvio executadas em cada ciclo. Desenhe o mesmo diagrama para o código desenrolado 10 vezes.

(8)

15 ciclos para 34 operações, resultando em 2.67 emissões por ciclo, com uma eficiência VLIW de 34 operações para 75 slots = 45.3%. Este escalonamento requer 12 registradores floating-point.

Desenrolado 10 vezes

17 ciclos para 54 operações, resultando em 3.18 emissões por ciclo, com uma eficiência VLIW de 54 operações para 85 slots = 63.5%. Este escalonamento requer 20 registradores floating-point.

Referências

Documentos relacionados

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

A prova do ENADE/2011, aplicada aos estudantes da Área de Tecnologia em Redes de Computadores, com duração total de 4 horas, apresentou questões discursivas e de múltipla

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

O Museu Digital dos Ex-votos, projeto acadêmico que objetiva apresentar os ex- votos do Brasil, não terá, evidentemente, a mesma dinâmica da sala de milagres, mas em

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

nhece a pretensão de Aristóteles de que haja uma ligação direta entre o dictum de omni et nullo e a validade dos silogismos perfeitos, mas a julga improcedente. Um dos

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de