Beruflich Dokumente
Kultur Dokumente
Exploração de ILP
denisfranco@furg.br
Junho 2013
1 Introdução
4 Despacho múltiplo
Introdução
VLIW
Processadores superescalares
Limites de ILP
Outline
1 Introdução
4 Despacho múltiplo
Introdução
VLIW
Processadores superescalares
Limites de ILP
Baseada em SW
Desktops e servidores
Exploração dinâmica
Desktops e servidores
Exploração dinâmica
PMDs
O objetivo é operação low power
Paralelismo é explorado em nı́veis mais baixos da arquitetura
Exploração estática é mais utilizada
ARM Cortex-A8
Desktops e servidores
Exploração dinâmica
PMDs
O objetivo é operação low power
Paralelismo é explorado em nı́veis mais baixos da arquitetura
Exploração estática é mais utilizada
ARM Cortex-A8
Exploração dinâmica em processadores mais recentes
ARM Cortex-A9
Prof. Denis Franco (denisfranco@furg.br) Arquitetura de Computadores Junho 2013 4 / 71
Introdução
Exemplo:
for (i=0; i<=999; i=i+1)
x[i] = x[i] + y[i];
Exemplo:
for (i=0; i<=999; i=i+1)
x[i] = x[i] + y[i];
Exemplo:
for (i=0; i<=999; i=i+1)
x[i] = x[i] + y[i];
Exploração de loop-unrolling.
Técnicas para transformação de loop-level parallelism → ILP
Via SW, via HW, ou SW+HW
Prof. Denis Franco (denisfranco@furg.br) Arquitetura de Computadores Junho 2013 6 / 71
Introdução
Dependências reais
Dependências de nome
Dependências reais
Dependências de nome
Dependências reais
Dependências de nome
Dependências reais
Dependências de nome
Dependências de nome
Quando duas instruções utilizam o mesmo nome de registrador, sem
fluxo de dados entre as mesmas
Dependências de nome
Quando duas instruções utilizam o mesmo nome de registrador, sem
fluxo de dados entre as mesmas
Antidependências
Dependências de saı́da
Dependências de nome
Quando duas instruções utilizam o mesmo nome de registrador, sem
fluxo de dados entre as mesmas
Antidependências
Dependências de saı́da
Eliminadas por renomeação de registradores
Outline
1 Introdução
4 Despacho múltiplo
Introdução
VLIW
Processadores superescalares
Limites de ILP
Escalonamento estático
Escalonamento estático
Escalonamento estático
Código de referência:
for (i=999; i>=0; i=i-1)
x[i] = x[i] + s;
Em assembly MIPS:
Escalonamento estático
Escalonamento estático
Escalonamento estático
Escalonamento estático
Escalonamento estático
Escalonamento estático
Escalonamento estático
Escalonamento estático
Escalonamento estático
Loop unrolling
Escalonamento estático
Loop unrolling
Escalonamento estático
Loop unrolling
Escalonamento estático
Loop unrolling
Desempenho obtido: 27 ciclos.
Loop: L.D F0, 0(R1)
stall
ADD.D F4, F0, F2
stall
stall
S.D F4, 0(R1)
L.D F6, -8(R1)
stall
ADD.D F8, F6, F2
stall
stall
S.D F8, -8(R1)
...
S.D F16, -24(R1)
DADDUI R1, R1, #-32
stall
BNE R1, R2, Loop
Escalonamento estático
Loop unrolling
Desempenho obtido: 27 ciclos.
Loop: L.D F0, 0(R1)
stall
ADD.D F4, F0, F2
stall
stall
S.D F4, 0(R1)
L.D F6, -8(R1)
stall
ADD.D F8, F6, F2
stall
stall
S.D F8, -8(R1)
...
S.D F16, -24(R1)
DADDUI R1, R1, #-32
stall
BNE R1, R2, Loop
Escalonamento estático
Loop unrolling
Escalonamento estático
Loop unrolling
Escalonamento estático
Loop unrolling
Decisões e transformações:
Determinar se as iterações são independentes
Escalonar dos registradores disponı́veis
Eliminar os testes intermediários e de final de laço
Determinar se os acessos à memória são independentes
Escalonar o código obtido
Escalonamento estático
Loop unrolling
Decisões e transformações:
Determinar se as iterações são independentes
Escalonar dos registradores disponı́veis
Eliminar os testes intermediários e de final de laço
Determinar se os acessos à memória são independentes
Escalonar o código obtido
Limitações:
Escalonamento estático
Loop unrolling
Decisões e transformações:
Determinar se as iterações são independentes
Escalonar dos registradores disponı́veis
Eliminar os testes intermediários e de final de laço
Determinar se os acessos à memória são independentes
Escalonar o código obtido
Limitações:
Redução no ganho com o controle de laço
Escalonamento estático
Loop unrolling
Decisões e transformações:
Determinar se as iterações são independentes
Escalonar dos registradores disponı́veis
Eliminar os testes intermediários e de final de laço
Determinar se os acessos à memória são independentes
Escalonar o código obtido
Limitações:
Redução no ganho com o controle de laço
Aumento do código, com impacto em cache misses
Escalonamento estático
Loop unrolling
Decisões e transformações:
Determinar se as iterações são independentes
Escalonar dos registradores disponı́veis
Eliminar os testes intermediários e de final de laço
Determinar se os acessos à memória são independentes
Escalonar o código obtido
Limitações:
Redução no ganho com o controle de laço
Aumento do código, com impacto em cache misses
Ocupação dos registradores
Escalonamento estático
Loop unrolling
Decisões e transformações:
Determinar se as iterações são independentes
Escalonar dos registradores disponı́veis
Eliminar os testes intermediários e de final de laço
Determinar se os acessos à memória são independentes
Escalonar o código obtido
Limitações:
Redução no ganho com o controle de laço
Aumento do código, com impacto em cache misses
Ocupação dos registradores
Complexidade do compilador
Previsão de desvios
Previsão de desvios avançada
Previsores de correlação:
Previsão baseada no comportamento de vários desvios correlacionados
Previsão de desvios
Previsão de desvios avançada
Previsores de correlação:
Previsão baseada no comportamento de vários desvios correlacionados
Exemplo:
if (aa==2)
aa = 0;
if (bb==2)
bb = 0;
if (aa!=bb) {
Previsão de desvios
Previsão de desvios avançada
Previsores de correlação:
Previsão baseada no comportamento de vários desvios correlacionados
Exemplo:
if (aa==2)
aa = 0;
if (bb==2)
bb = 0;
if (aa!=bb) {
Previsor (m,n):
Utiliza o comportamento dos m últimos desvios
Caracterizados por previsores de n bits
Previsão de desvios
Previsão de desvios avançada
Previsão de desvios
Previsão de desvios avançada
Previsores tournament:
Previsão baseada em comportamento local e global do desvio
Previsão baseada em múltiplos previsores e a seleção do mais
adequado
Previsão de desvios
Previsão de desvios avançada
Previsores tournament:
Previsão baseada em comportamento local e global do desvio
Previsão baseada em múltiplos previsores e a seleção do mais
adequado
Previsão de desvios
Previsão de desvios no Intel Core i7
Previsão de desvios
Previsão de desvios no Intel Core i7
Outline
1 Introdução
4 Despacho múltiplo
Introdução
VLIW
Processadores superescalares
Limites de ILP
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Out-of-order completion
Complica o gerenciamento de exceções
Escalonamento dinâmico
Out-of-order completion
Complica o gerenciamento de exceções
Exceção em uma instrução enquanto posteriores já foram completadas
Escalonamento dinâmico
Out-of-order completion
Complica o gerenciamento de exceções
Exceção em uma instrução enquanto posteriores já foram completadas
Exceção em uma instrução posterior enquanto anteriores não foram
completadas
Escalonamento dinâmico
Out-of-order completion
Complica o gerenciamento de exceções
Exceção em uma instrução enquanto posteriores já foram completadas
Exceção em uma instrução posterior enquanto anteriores não foram
completadas
Exceções imprecisas x exceções precisas
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
Escalonamento dinâmico
O algoritmo de Tomasulo
Robert Tomasulo
Desenvolvido para explorar processamento de ponto flutuante e acessos
à memória
Verifica a disponibilidade de operandos (RAW hazards)
Renomeia registradores (WAW e WAR hazards)
Escalonamento dinâmico
Dependências
Exemplo:
DIV.D F0, F2, F4
ADD.D F6, F0, F8
S.D F6, 0(R1)
SUB.D F8, F10, F14
MUL.D F6, F10, F8
Escalonamento dinâmico
Dependências reais
Exemplo:
DIV.D F0,
ADD.D F6, F0
S.D F6,
SUB.D F8,
MUL.D , F8
Escalonamento dinâmico
Antidependências
Exemplo:
ADD.D , F8
S.D F6,
SUB.D F8,
MUL.D F6,
Escalonamento dinâmico
Dependências de saı́da
Exemplo:
ADD.D F6,
MUL.D F6,
Escalonamento dinâmico
Renomeação de registradores
Exemplo:
DIV.D F0, F2, F4
ADD.D F6, F0, F8
S.D F6, 0(R1)
SUB.D F8, F10, F14
MUL.D F6, F10, F8
Escalonamento dinâmico
Renomeação de registradores
Exemplo:
DIV.D F0, F2, F4
ADD.D S, F0, F8
S.D S, 0(R1)
SUB.D T, F10, F14
MUL.D F6, F10, T
Escalonamento dinâmico
Renomeação de registradores
Escalonamento dinâmico
Estrutura básica de um pipeline do tipo Tomasulo
Escalonamento dinâmico
Operação básica de um pipeline do tipo Tomasulo
Escalonamento dinâmico
Exemplo dos dados em estações de reserva
Escalonamento dinâmico
Execução especulativa
Escalonamento dinâmico
Execução especulativa
Escalonamento dinâmico
Execução especulativa
Escalonamento dinâmico
Pipeline com execução especulativa
Outline
1 Introdução
4 Despacho múltiplo
Introdução
VLIW
Processadores superescalares
Limites de ILP
Despacho múltiplo
Despacho múltiplo
Despacho múltiplo
As diferentes abordagens
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
VLIW
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Modelo de programação:
128 registadores de uso geral de 64 bits
128 registradores de ponto flutuante de 82 bits
64 registradores de predicado de 1 bit (execução predicativa)
8 registradores de 64 bits para desvios indiretos
Bundles: conjunto com 3 instruções
128 bits
Instruções de 41 bits
Template de 5 bits: formato do bundle, unidades de execução e stops
Capacidade de despacho de 2 bundles por ciclo de clock
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Execução predicativa:
Instruções associadas a registradores de predicado
Instruções de teste e desvio = desvio predicativo
Registradores de predicado modificados por instruções de comparação
e teste
Permite múltiplas comparações com uma única instrução
Execução especulativa:
Especulação de instruções de controle: deferimento de exceções
Especulação de loads: valor lido precisa ser validado
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Despacho múltiplo
IA-64
Desempenhos para SPECfp e SPECint: (1,5 GHz; 3,8 GHz; 2,8 GHz; 1,9
GHz)
Despacho múltiplo
Superescalares
Despacho múltiplo
Superescalares
Despacho múltiplo
Superescalares
Despacho múltiplo
Superescalares
Despacho múltiplo
Superescalares
Despacho múltiplo
Superescalares
Limites na especulação:
Limites de ILP
O processador perfeito
Limites de ILP
O processador perfeito
Despacho múltiplo
O processador (quase) possı́vel
Despacho múltiplo
Mais que ILP?
TLP
DLP