SlideShare uma empresa Scribd logo
DESDOBRAMENTO E
ESCALONAMENTO DE LOOP
– PIPELINE MIPS 32 BITS
ELAINE CECÍLIA GATTO
Usando o código a seguir:
- Desdobre o código quatro vezes e
escalone-o para execução rápida no
pipeline padrão do MIPS sem mecanismo
de forwarding.
- Considere que ele admite a instrução
ADDI. Você pode considerar que o LOOP
é executado para um múltiplo de quatro
vezes. Suponha inicialmente que$10 = 0
e $30 = 400. Suponha também que os
desvios são resolvidos no estágio MEM.
- Como o código escalonado se compara
com o código não escalonado original em
termos de execução—isto é, em termos
de speed up? Mostre o código
desdobrado e depois escalonado.
LOOP: Lw $2, 0($10)
Sub $4, $2, $3
Sw $4, 0($10)
Addi $10, $10, 4
Bne $10, $30, LOOP
lw $2, 0($10)
IF/IM ID/REG EX/ALU MEM WB/REG
cc1
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 1:
- A instrução LW entra no pipeline
O conteúdo deste material está no livro ARQUITETURA DE COMPUTADORES UMA ABORDAGEM
QUANTITATIVA. Vai da página 135 a 140.
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 2:
- A instrução LW está sendo codificada
- A instrução sub entra no pipeline
lw $2, 0($10)
IF/IM EX/ALU MEM WB/REG
cc2
sub $4, 42, $3
ID/REG
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 3:
- A instrução LW está calculando o
endereço de memória de onde deve
pegar o operando
- A instrução SUB está sendo codificada
- A instrução SW entra no pipeline
lw $2, 0($10)
IF/IM EX/ALU MEM WB/REG
cc3
sub $4, 42, $3
ID/REG
sw $4, 0($10)
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 4:
- A instrução LW está buscando o valor
do endereço de memória calculado
- A instrução SUB está sendo calculada:
$4 = $2 - $3
- A instrução SW está sendo codificada
- A instrução ADDI entra no pipeline.
Neste ciclo temos um conflito entre as
instruções LW e SUB. O valor do
operando $2 que SUB precisa ainda não
está disponível!
lw $2, 0($10)
IF/IM EX/ALU MEM WB/REG
cc4
sub $4, 42, $3
ID/REG
sw $4, 0($10)
addi $10, $10, 4
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 5:
- A instrução LW escreve no registrador
$2 e sai do pipeline
- A instrução SUB não faz nada no
estágio MEM neste ciclo
- A instrução SW está calculando o
endereço de memória
- A instrução ADDI está sendo codificada
- A instrução BNE entra no pipeline
lw $2, 0($10)
IF/IM EX/ALU WB/REG
cc5
sub $4, 42, $3
ID/REG
sw $4, 0($10)
addi $10, $10, 4
bne $10, $30, LOOP
MEM
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 6:
- A instrução SUB escreve no registrador
$4 e sai do pipeline
- A instrução SW escreve o valor que
está no registrador $4 no endereço de
memória calculado
- A instrução ADDI calcula $10 = $10 + 4
- A instrução BNE está sendo codificada
Aqui temos um problema com as
instruções SUB e SW. Qual valor correto
que será escrito por SW sendo que SUB
ainda não terminou a escrita?
IF/IM EX/ALU WB/REG
cc6
sub $4, 42, $3
ID/REG
sw $4, 0($10)
addi $10, $10, 4
bne $10, $30, LOOP
MEM
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 7:
- A instrução SW não faz nada no estágio
WB e sai do pipeline
- A instrução ADDI não faz nada no
estágio MEM
- A instrução BNE está comparando o
valores dos registradores: $10 != $30 ?
Aqui temos um problema com as
instruções ADDI e BNE. O valor do
registrador $10 ainda não foi escrito,
então BNE não pode compará-lo!
IF/IM EX/ALU
cc7 ID/REG
sw $4, 0($10)
addi $10, $10, 4
bne $10, $30, LOOP
WB/REG
MEM
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 8:
- A instrução ADDI escreve no registrador
$10 e sai do pipeline
- A instrução BNE, no estágio MEM,
realiza o desvio
Como temos o problema no ciclo anterior,
ele persistirá aqui!
IF/IM EX/ALU
cc8 ID/REG
addi $10, $10, 4
bne $10, $30, LOOP
WB/REG
MEM
ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS
CICLO 9:
- A instrução BNE sai do pipeline
IF/IM EX/ALU
cc9 ID/REG
bne $10, $30, LOOP
WB/REG
MEM
Concluímos que o código tem conflitos que precisam ser resolvidos com forwarding e bolhas. No entanto, o
exercício diz que o pipeline não possui o mecanismo de forwarding. Os conflitos estão marcados no código a
seguir:
LOOP: Lw $2, 0($10)
Sub $4, $2, $3
Sw $4, 0($10)
Addi $10, $10, 4
Bne $10, $30, LOOP
COM MECANISMO DE FORWARDING O PIPELINE DESTE CÓDIGO FICA DA SEGUINTE FORMA:
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG WB/REG
MEM
IF/IM EX/ALU
ID/REG MEM WB/REG
EX/ALU
IF/IM ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
Lw $2, 0($10)
Sub $4, $2, 43
Sw $4, 0($10)
Addi $10, $10, 4
Bne $10, $10, LOOP
12 ciclos de clock para iniciar e
finalizar as 8 instruções e
precisaremos de 3 bolhas.
8 ciclos de START de instruções
1 2 3 4 5 6 7 8 9 10 11 12
SEM MECANISMO DE FORWARDING O PIPELINE DESTE CÓDIGO FICA DA SEGUINTE FORMA:
IF/IM EX/ALU
ID/REG MEM WB/REG
Lw $2, 0($10)
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
Sub $4, $2, $3
Sw $4, 0($10)
Addi $10, $10, 4
Bne $10, $10, LOOP
14 ciclos de clock para iniciar e
finalizar as 10 instruções!
Precisaremos de 5 bolhas. São 10
ciclos de start.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
COM MECANISMO DE FORWARDING, E
SEM QUALQUER ESCALONAMENTO, O
CÓDIGO FICA DA SEGUINTE FORMA:
LOOP: 1. LW $2, 9($10)
2. BOLHA
3. SUB $4, $2, $3
4. BOLHA
5. SW $4, 0($10)
6. ADDI $10, $10, 4
7. BOLHA
8. BNE $10, $30, LOOP
SEM MECANISMO DE FORWARDING, E
SEM QUALQUER ESCALONAMENTO, O
CÓDIGO FICA DA SEGUINTE FORMA:
LOOP: 1. LW $2, 9($10)
2. BOLHA
3. BOLHA
4. SUB $4, $2, $3
5. BOLHA
6. SW $4, 0($10)
7. ADDI $10, $10, 4
8. BOLHA
9. BOLHA
10. BNE $10, $30, LOOP
Estes códigos são apenas reflexo dos diagramas dos slides anteriores
ESCALONAMENTO:
- Técnica usada para manter o pipeline cheio;
- Encontra sequências de instruções não relacionadas que podem ser sobrepostas;
- Evita bolhas:
- Uma instrução dependente precisa ser separada da instrução de origem por uma distância em
ciclos de clock igual à latência do pipeline dessa instrução de origem
COM MECANISMO DE FORWARDING, E
COM ESCALONAMENTO, O CÓDIGO
FICA DA SEGUINTE FORMA:
LOOP: 1. LW $2, 0($10)
2. ADDI $10, $10, 4
3. SUB $4, $2, $3
4. BOLHA
5. SW $4, 8($10)
6. BNE $10, $30, LOOP
SEM MECANISMO DE FORWARDING, E
COM ESCALONAMENTO, O CÓDIGO
FICA DA SEGUINTE FORMA:
LOOP: 1. LW $2, 0($10)
2. ADDI $10, $10, 4
3. BOLHA
4. SUB $4, $2, $3
5. BOLHA
6. BOLHA
7. SW $4, 8($10)
8. BNE $10, $30, LOOP
Vamos ver como fica o diagrama pra esses dois códigos!
O 8 na instrução SW em ambos os códigos, é por conta que pulamos 2 instruções: 0 + 4 + 4. A
bolha não conta! Para escalonar precisamos prestar atenção nestes detalhes!
COM MECANISMO DE FORWARDING E COM ESCALONAMENTO
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG WB/REG
MEM
IF/IM EX/ALU
ID/REG MEM WB/REG
EX/ALU
IF/IM ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
Lw $2, 0($10)
Sub $4, $2, 43
Sw $4, 8($10)
Addi $10, $10, 4
Bne $10, $10, LOOP
10 ciclos de clock para iniciar e
finalizar as 6 instruções e
precisaremos de 1 bolha.
6 ciclos de START de instruções
1 2 3 4 5 6 7 8 9 10
SEM MECANISMO DE FORWARDING E COM ESCALONAMENTO
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG WB/REG
MEM
IF/IM EX/ALU
ID/REG MEM WB/REG
EX/ALU
IF/IM ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
Lw $2, 0($10)
Sub $4, $2, 43
Sw $4, 8($10)
Addi $10, $10, 4
Bne $10, $10, LOOP
12 ciclos de clock para iniciar e
finalizar as 8 instruções e
precisaremos de 3 bolhas.
8 ciclos de START de instruções
1 2 3 4 5 6 7 8 9 10 11 12
DESDOBRANDO O LOOP EM 4 CÓPIAS
1. Lw $2, 0($10)
2. Sub $4, $2, $3
3. Sw $4, 0($10)
4. Lw $6, 8($10)
5. Sub $8, $6, $3
6. Sw $8, 8($10)
7. Lw $12, 16($10)
8. Sub $14, $12, $3
9. Sw $14, 16($10)
10. Lw $16, 24($10)
11. Sub $18, $16, $3
12. Sw $18, 24($10)
13. Addi $10, $10, 32
14. Bne $10, $30, LOOP
LOOP:
Para desdobrar o código você precisa fazer uma cópia do
CORPO do LOOP renomeando os registradores e
modificando o índice que acompanha o endereço base da
instrução de load/store.
As instruções referentes ao incremento do LOOP e à
decisão do DESVIO não entram na cópia!
O código à esquerda já é o código desdobrado. Cada parte
replicada está com uma cor diferente para destacar as
mudanças.
Agora temos 14 instruções que vão encher o pipeline e
com isso as bolhas não serão mais necessárias.
Ainda assim, do jeito que está aqui teremos bolhas. Vamos
reordenar para evitar isto!
DESDOBRANDO O LOOP EM 4 CÓPIAS
1. Lw $2, 0($10)
2. Lw $6, 8($10)
3. Lw $12, 16($10)
4. Lw $16, 24($10)
5. Sub $4, $2, $3
6. Sub $8, $6, $3
7. Sub $14, $12, $3
8. Sub $18, $16, $3
9. Sw $4, 0($10)
10. Sw $8, 8($10)
11. Sw $14, 16($10)
12. Sw $18, 24($10)
13. Addi $10, $10, 4
14. Bne $10, $30, LOOP
LOOP:
Depois de desdobrar o código, reordene de
forma que todas as instruções de LOAD
estejam no inicio e todas as instruções de
STORE no final.
DESDOBRAMENTO:
- É uma técnica para aumentar o número de
instruções relativas às instruções de desvio
- Replica o corpo do LOOP várias vezes e
ajusta o final
- Remove as instruções de desvio do meio do
caminho
- Permite que instruções de diferentes
iterações sejam escalonadas juntas
- Necessário renomear os registradores
- Considerar apenas o corpo do LOOP para a
replicação
- Evita bolhas
DIAGRAMA CÓDIGO DESDOBRADO E ESCALONADO
IF/IM EX/ALU
ID/REG MEM WB/REG
LW $2, 0($10)
IF/IM EX/ALU
ID/REG MEM WB/REG
LW $6, 8($10)
IF/IM EX/ALU
ID/REG MEM WB/REG
LW $12, 16($10)
IF/IM EX/ALU
ID/REG MEM WB/REG
LW $16, 24($10)
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
SUB $4, $2, $3
SUB $8, $6, $3
SUB $14, $12, $3
Note que escreve em $2 no ciclo 5 e
usa $2 no ciclo 7. Não há conflitos! O
mesmo pode ser observado nas outras
instruções
1 2 3 4 5 6 7 8 9 10 11
DIAGRAMA CÓDIGO DESDOBRADO E ESCALONADO
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
SUB $18, 416, $3
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
IF/IM EX/ALU
ID/REG MEM WB/REG
Sw $4, 0($10)
Sw $8, 8($10)
Sw $14, 16($10)
Sw $18, 24($10)
Addi $10, $10, 32
Bne $10, $30, LOOP
8 9 10 11 12 13 14 15 16 17 18
- Desdobramos o código em quatro vezes
- Consideramos que o circuito não tem forwarding
- Consideramos que os desvios são resolvidos no estágio MEM
- Consideramos que o circuito admite a instrução ADDI
- Mostramos o código desdobrado e escalonado
- Como o código escalonado se compara com o código não escalonado original em termos de
execução, isto é, em termos de speed up?
Código Original
14 ciclos de clock para iniciar e finalizar as
10 instruções! Precisaremos de 5 bolhas.
São necessário 10 ciclos de clock de start.
Código Desdobrado e Escalonado
18 ciclos de clock para iniciar e finalizar as 14
instruções! Não precisaremos de bolhas. São
necessários 14 ciclos de clock de start.

Mais conteúdo relacionado

DOCX
Situação problemas ideia de função.gabarito
PDF
Fisica movimento uniforme resolvidos
PDF
Station b2-kursbuchpdf
PDF
Balanza de pagos
PPSX
MIPS Pipeline
PDF
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
PDF
Pipeline
PDF
MIPS 32 BITS
Situação problemas ideia de função.gabarito
Fisica movimento uniforme resolvidos
Station b2-kursbuchpdf
Balanza de pagos
MIPS Pipeline
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
Pipeline
MIPS 32 BITS

Semelhante a Pipeline desdobramento escalonamento (20)

PDF
Cheat sheet Mips 32 bits
PPT
8085 2
PPT
Programação básica de microcontroladores
PPTX
Arquitetura MIPS. Uniciclo e multiciclo.
PPT
Pipeline
PDF
Fp soft.pdf
PDF
assembly.pdf
PDF
Webinar: Porque o RTOS não faz o que eu quero?
PPT
Microprogramacao
PPT
Microprogramacao
PPT
8085 3
PDF
Apostila clps & grafset ufrn
PDF
Apostila clp final
PDF
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
PDF
Apostila para aprender sobre CPUs e tudo mais
PPT
Processador MIPS Arquitetura e Assembly WANG
PPT
8085 Introducao
PPTX
Cortex M0+ PIPELINE for data processing and branch instructions - ptbr
PDF
Roteiro IOC 06
DOCX
MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 512024.docx
Cheat sheet Mips 32 bits
8085 2
Programação básica de microcontroladores
Arquitetura MIPS. Uniciclo e multiciclo.
Pipeline
Fp soft.pdf
assembly.pdf
Webinar: Porque o RTOS não faz o que eu quero?
Microprogramacao
Microprogramacao
8085 3
Apostila clps & grafset ufrn
Apostila clp final
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Apostila para aprender sobre CPUs e tudo mais
Processador MIPS Arquitetura e Assembly WANG
8085 Introducao
Cortex M0+ PIPELINE for data processing and branch instructions - ptbr
Roteiro IOC 06
MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 512024.docx
Anúncio

Mais de Elaine Cecília Gatto (20)

PDF
Exercícios resolvidos de MIPS Portal Embarcados
PDF
Exercicio Resolvido de Busca Binária com Codigo e Imagens
PDF
A influência da Tecnologia em cada faixa etaria
PPTX
Inteligência Artificial Aplicada à Medicina
PPTX
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
PPTX
Apresentação da minha tese de doutorado no EPPC
PDF
entrevista r7.pdf
PPTX
Como a pesquisa científica impacta o mundo real.pptx
PDF
Empoderamento Feminino
PPTX
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
PPTX
Community Detection for Multi-Label Classification - Seminários UFSCar
PPTX
Classificação Multirrótulo: Aprendizado de Correlações
PDF
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
PPTX
Community Detection Method for Multi-Label Classification
PDF
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
PDF
Curtinhas de sábado.pdf
PDF
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
PDF
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
PDF
Como descobrir e classificar coisas usando machine learning sem compilcação
PDF
Exploring label correlations for partitioning the label space in multi label ...
Exercícios resolvidos de MIPS Portal Embarcados
Exercicio Resolvido de Busca Binária com Codigo e Imagens
A influência da Tecnologia em cada faixa etaria
Inteligência Artificial Aplicada à Medicina
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Apresentação da minha tese de doutorado no EPPC
entrevista r7.pdf
Como a pesquisa científica impacta o mundo real.pptx
Empoderamento Feminino
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Community Detection for Multi-Label Classification - Seminários UFSCar
Classificação Multirrótulo: Aprendizado de Correlações
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Community Detection Method for Multi-Label Classification
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Curtinhas de sábado.pdf
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Como descobrir e classificar coisas usando machine learning sem compilcação
Exploring label correlations for partitioning the label space in multi label ...
Anúncio

Último (20)

PDF
saeb_documentos_de_referencia_versao_1.0.pdf
PPTX
A História da Europa na Baixa Idade Média.pptx
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPT
História e Evolução dos Computadores domésticos
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PDF
BINGOS_DAS_PALAVRAS_bingo das palavras.pdf
PPTX
Programa Nacional de Saúde do Adulto.pptx
PPT
aula de envelecimento.ppt saúde do idoso
PDF
A provisão de jojuador (ramadã) islamismo
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PPTX
Ciências da Natureza e suas áreas de desenvolvimento
PPTX
INDÚSTRIA_ Histórico da industrialização.pptx
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PPTX
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
O retorno a origem (islã Islamismo)
PPTX
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
PPTX
disciplulado curso preparatorio para novos
PDF
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
saeb_documentos_de_referencia_versao_1.0.pdf
A História da Europa na Baixa Idade Média.pptx
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
História e Evolução dos Computadores domésticos
GUERRAFRIA.pptdddddddddddddddddddddddddx
BINGOS_DAS_PALAVRAS_bingo das palavras.pdf
Programa Nacional de Saúde do Adulto.pptx
aula de envelecimento.ppt saúde do idoso
A provisão de jojuador (ramadã) islamismo
HISTÓRIA DO BRASIL - anos de Democracia.pptx
Ciências da Natureza e suas áreas de desenvolvimento
INDÚSTRIA_ Histórico da industrialização.pptx
Aula 13 - Tópico Frasal - Argumentação.pptx
Trabalho Cidades sustentáveis ou Utopia.pptx
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
O retorno a origem (islã Islamismo)
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
disciplulado curso preparatorio para novos
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf

Pipeline desdobramento escalonamento

  • 1. DESDOBRAMENTO E ESCALONAMENTO DE LOOP – PIPELINE MIPS 32 BITS ELAINE CECÍLIA GATTO
  • 2. Usando o código a seguir: - Desdobre o código quatro vezes e escalone-o para execução rápida no pipeline padrão do MIPS sem mecanismo de forwarding. - Considere que ele admite a instrução ADDI. Você pode considerar que o LOOP é executado para um múltiplo de quatro vezes. Suponha inicialmente que$10 = 0 e $30 = 400. Suponha também que os desvios são resolvidos no estágio MEM. - Como o código escalonado se compara com o código não escalonado original em termos de execução—isto é, em termos de speed up? Mostre o código desdobrado e depois escalonado. LOOP: Lw $2, 0($10) Sub $4, $2, $3 Sw $4, 0($10) Addi $10, $10, 4 Bne $10, $30, LOOP
  • 3. lw $2, 0($10) IF/IM ID/REG EX/ALU MEM WB/REG cc1 ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 1: - A instrução LW entra no pipeline O conteúdo deste material está no livro ARQUITETURA DE COMPUTADORES UMA ABORDAGEM QUANTITATIVA. Vai da página 135 a 140.
  • 4. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 2: - A instrução LW está sendo codificada - A instrução sub entra no pipeline lw $2, 0($10) IF/IM EX/ALU MEM WB/REG cc2 sub $4, 42, $3 ID/REG
  • 5. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 3: - A instrução LW está calculando o endereço de memória de onde deve pegar o operando - A instrução SUB está sendo codificada - A instrução SW entra no pipeline lw $2, 0($10) IF/IM EX/ALU MEM WB/REG cc3 sub $4, 42, $3 ID/REG sw $4, 0($10)
  • 6. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 4: - A instrução LW está buscando o valor do endereço de memória calculado - A instrução SUB está sendo calculada: $4 = $2 - $3 - A instrução SW está sendo codificada - A instrução ADDI entra no pipeline. Neste ciclo temos um conflito entre as instruções LW e SUB. O valor do operando $2 que SUB precisa ainda não está disponível! lw $2, 0($10) IF/IM EX/ALU MEM WB/REG cc4 sub $4, 42, $3 ID/REG sw $4, 0($10) addi $10, $10, 4
  • 7. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 5: - A instrução LW escreve no registrador $2 e sai do pipeline - A instrução SUB não faz nada no estágio MEM neste ciclo - A instrução SW está calculando o endereço de memória - A instrução ADDI está sendo codificada - A instrução BNE entra no pipeline lw $2, 0($10) IF/IM EX/ALU WB/REG cc5 sub $4, 42, $3 ID/REG sw $4, 0($10) addi $10, $10, 4 bne $10, $30, LOOP MEM
  • 8. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 6: - A instrução SUB escreve no registrador $4 e sai do pipeline - A instrução SW escreve o valor que está no registrador $4 no endereço de memória calculado - A instrução ADDI calcula $10 = $10 + 4 - A instrução BNE está sendo codificada Aqui temos um problema com as instruções SUB e SW. Qual valor correto que será escrito por SW sendo que SUB ainda não terminou a escrita? IF/IM EX/ALU WB/REG cc6 sub $4, 42, $3 ID/REG sw $4, 0($10) addi $10, $10, 4 bne $10, $30, LOOP MEM
  • 9. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 7: - A instrução SW não faz nada no estágio WB e sai do pipeline - A instrução ADDI não faz nada no estágio MEM - A instrução BNE está comparando o valores dos registradores: $10 != $30 ? Aqui temos um problema com as instruções ADDI e BNE. O valor do registrador $10 ainda não foi escrito, então BNE não pode compará-lo! IF/IM EX/ALU cc7 ID/REG sw $4, 0($10) addi $10, $10, 4 bne $10, $30, LOOP WB/REG MEM
  • 10. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 8: - A instrução ADDI escreve no registrador $10 e sai do pipeline - A instrução BNE, no estágio MEM, realiza o desvio Como temos o problema no ciclo anterior, ele persistirá aqui! IF/IM EX/ALU cc8 ID/REG addi $10, $10, 4 bne $10, $30, LOOP WB/REG MEM
  • 11. ANALISANDO O CÓDIGO MIPS PARA IDENTIFICAR OS CONFLITOS/HAZARDS/DEPENDENCIAS CICLO 9: - A instrução BNE sai do pipeline IF/IM EX/ALU cc9 ID/REG bne $10, $30, LOOP WB/REG MEM Concluímos que o código tem conflitos que precisam ser resolvidos com forwarding e bolhas. No entanto, o exercício diz que o pipeline não possui o mecanismo de forwarding. Os conflitos estão marcados no código a seguir: LOOP: Lw $2, 0($10) Sub $4, $2, $3 Sw $4, 0($10) Addi $10, $10, 4 Bne $10, $30, LOOP
  • 12. COM MECANISMO DE FORWARDING O PIPELINE DESTE CÓDIGO FICA DA SEGUINTE FORMA: IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG WB/REG MEM IF/IM EX/ALU ID/REG MEM WB/REG EX/ALU IF/IM ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG Lw $2, 0($10) Sub $4, $2, 43 Sw $4, 0($10) Addi $10, $10, 4 Bne $10, $10, LOOP 12 ciclos de clock para iniciar e finalizar as 8 instruções e precisaremos de 3 bolhas. 8 ciclos de START de instruções 1 2 3 4 5 6 7 8 9 10 11 12
  • 13. SEM MECANISMO DE FORWARDING O PIPELINE DESTE CÓDIGO FICA DA SEGUINTE FORMA: IF/IM EX/ALU ID/REG MEM WB/REG Lw $2, 0($10) IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG Sub $4, $2, $3 Sw $4, 0($10) Addi $10, $10, 4 Bne $10, $10, LOOP 14 ciclos de clock para iniciar e finalizar as 10 instruções! Precisaremos de 5 bolhas. São 10 ciclos de start. 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  • 14. COM MECANISMO DE FORWARDING, E SEM QUALQUER ESCALONAMENTO, O CÓDIGO FICA DA SEGUINTE FORMA: LOOP: 1. LW $2, 9($10) 2. BOLHA 3. SUB $4, $2, $3 4. BOLHA 5. SW $4, 0($10) 6. ADDI $10, $10, 4 7. BOLHA 8. BNE $10, $30, LOOP SEM MECANISMO DE FORWARDING, E SEM QUALQUER ESCALONAMENTO, O CÓDIGO FICA DA SEGUINTE FORMA: LOOP: 1. LW $2, 9($10) 2. BOLHA 3. BOLHA 4. SUB $4, $2, $3 5. BOLHA 6. SW $4, 0($10) 7. ADDI $10, $10, 4 8. BOLHA 9. BOLHA 10. BNE $10, $30, LOOP Estes códigos são apenas reflexo dos diagramas dos slides anteriores ESCALONAMENTO: - Técnica usada para manter o pipeline cheio; - Encontra sequências de instruções não relacionadas que podem ser sobrepostas; - Evita bolhas: - Uma instrução dependente precisa ser separada da instrução de origem por uma distância em ciclos de clock igual à latência do pipeline dessa instrução de origem
  • 15. COM MECANISMO DE FORWARDING, E COM ESCALONAMENTO, O CÓDIGO FICA DA SEGUINTE FORMA: LOOP: 1. LW $2, 0($10) 2. ADDI $10, $10, 4 3. SUB $4, $2, $3 4. BOLHA 5. SW $4, 8($10) 6. BNE $10, $30, LOOP SEM MECANISMO DE FORWARDING, E COM ESCALONAMENTO, O CÓDIGO FICA DA SEGUINTE FORMA: LOOP: 1. LW $2, 0($10) 2. ADDI $10, $10, 4 3. BOLHA 4. SUB $4, $2, $3 5. BOLHA 6. BOLHA 7. SW $4, 8($10) 8. BNE $10, $30, LOOP Vamos ver como fica o diagrama pra esses dois códigos! O 8 na instrução SW em ambos os códigos, é por conta que pulamos 2 instruções: 0 + 4 + 4. A bolha não conta! Para escalonar precisamos prestar atenção nestes detalhes!
  • 16. COM MECANISMO DE FORWARDING E COM ESCALONAMENTO IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG WB/REG MEM IF/IM EX/ALU ID/REG MEM WB/REG EX/ALU IF/IM ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG Lw $2, 0($10) Sub $4, $2, 43 Sw $4, 8($10) Addi $10, $10, 4 Bne $10, $10, LOOP 10 ciclos de clock para iniciar e finalizar as 6 instruções e precisaremos de 1 bolha. 6 ciclos de START de instruções 1 2 3 4 5 6 7 8 9 10
  • 17. SEM MECANISMO DE FORWARDING E COM ESCALONAMENTO IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG WB/REG MEM IF/IM EX/ALU ID/REG MEM WB/REG EX/ALU IF/IM ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG Lw $2, 0($10) Sub $4, $2, 43 Sw $4, 8($10) Addi $10, $10, 4 Bne $10, $10, LOOP 12 ciclos de clock para iniciar e finalizar as 8 instruções e precisaremos de 3 bolhas. 8 ciclos de START de instruções 1 2 3 4 5 6 7 8 9 10 11 12
  • 18. DESDOBRANDO O LOOP EM 4 CÓPIAS 1. Lw $2, 0($10) 2. Sub $4, $2, $3 3. Sw $4, 0($10) 4. Lw $6, 8($10) 5. Sub $8, $6, $3 6. Sw $8, 8($10) 7. Lw $12, 16($10) 8. Sub $14, $12, $3 9. Sw $14, 16($10) 10. Lw $16, 24($10) 11. Sub $18, $16, $3 12. Sw $18, 24($10) 13. Addi $10, $10, 32 14. Bne $10, $30, LOOP LOOP: Para desdobrar o código você precisa fazer uma cópia do CORPO do LOOP renomeando os registradores e modificando o índice que acompanha o endereço base da instrução de load/store. As instruções referentes ao incremento do LOOP e à decisão do DESVIO não entram na cópia! O código à esquerda já é o código desdobrado. Cada parte replicada está com uma cor diferente para destacar as mudanças. Agora temos 14 instruções que vão encher o pipeline e com isso as bolhas não serão mais necessárias. Ainda assim, do jeito que está aqui teremos bolhas. Vamos reordenar para evitar isto!
  • 19. DESDOBRANDO O LOOP EM 4 CÓPIAS 1. Lw $2, 0($10) 2. Lw $6, 8($10) 3. Lw $12, 16($10) 4. Lw $16, 24($10) 5. Sub $4, $2, $3 6. Sub $8, $6, $3 7. Sub $14, $12, $3 8. Sub $18, $16, $3 9. Sw $4, 0($10) 10. Sw $8, 8($10) 11. Sw $14, 16($10) 12. Sw $18, 24($10) 13. Addi $10, $10, 4 14. Bne $10, $30, LOOP LOOP: Depois de desdobrar o código, reordene de forma que todas as instruções de LOAD estejam no inicio e todas as instruções de STORE no final. DESDOBRAMENTO: - É uma técnica para aumentar o número de instruções relativas às instruções de desvio - Replica o corpo do LOOP várias vezes e ajusta o final - Remove as instruções de desvio do meio do caminho - Permite que instruções de diferentes iterações sejam escalonadas juntas - Necessário renomear os registradores - Considerar apenas o corpo do LOOP para a replicação - Evita bolhas
  • 20. DIAGRAMA CÓDIGO DESDOBRADO E ESCALONADO IF/IM EX/ALU ID/REG MEM WB/REG LW $2, 0($10) IF/IM EX/ALU ID/REG MEM WB/REG LW $6, 8($10) IF/IM EX/ALU ID/REG MEM WB/REG LW $12, 16($10) IF/IM EX/ALU ID/REG MEM WB/REG LW $16, 24($10) IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG SUB $4, $2, $3 SUB $8, $6, $3 SUB $14, $12, $3 Note que escreve em $2 no ciclo 5 e usa $2 no ciclo 7. Não há conflitos! O mesmo pode ser observado nas outras instruções 1 2 3 4 5 6 7 8 9 10 11
  • 21. DIAGRAMA CÓDIGO DESDOBRADO E ESCALONADO IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG SUB $18, 416, $3 IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG IF/IM EX/ALU ID/REG MEM WB/REG Sw $4, 0($10) Sw $8, 8($10) Sw $14, 16($10) Sw $18, 24($10) Addi $10, $10, 32 Bne $10, $30, LOOP 8 9 10 11 12 13 14 15 16 17 18
  • 22. - Desdobramos o código em quatro vezes - Consideramos que o circuito não tem forwarding - Consideramos que os desvios são resolvidos no estágio MEM - Consideramos que o circuito admite a instrução ADDI - Mostramos o código desdobrado e escalonado - Como o código escalonado se compara com o código não escalonado original em termos de execução, isto é, em termos de speed up? Código Original 14 ciclos de clock para iniciar e finalizar as 10 instruções! Precisaremos de 5 bolhas. São necessário 10 ciclos de clock de start. Código Desdobrado e Escalonado 18 ciclos de clock para iniciar e finalizar as 14 instruções! Não precisaremos de bolhas. São necessários 14 ciclos de clock de start.