itanium 2 douglas gameiro diniz ra: 008505 fernando mendonça maranho ra:016089 copyright 2005 ©...
Post on 17-Apr-2015
106 Views
Preview:
TRANSCRIPT
ITANIUM 2
Douglas Gameiro Diniz RA: 008505
Fernando Mendonça Maranho RA:016089
Copyright 2005 © MC722. Professor Rodolfo.
Visão Geral
• Desenvolvido entre 1997 e 2000 pela aliança HP / Intel para arquiteturas IA-64
• Processador de 64 bits
• Utilizado em servidores de grande porte e aplicações técnicas que exigem alto desempenho.
• Compatibilidade binária com o conjunto de instruções IA-32
Visão Geral
• Baseado na arquitetura EPIC – Explicitly Parallel Instruction Computing
• Motivação:– Conseguir ILP eficiente sem grande
aumento na complexidade do hardware, como era o caso dos processadores RISC superescalares
Visão Geral
Versões do Itanium 2
• Oferecido em 3 versões principais:
Características da arquitetura EPIC
• Arranjo de instruções em grupos que explicitamente denotam paralelismo
• Disponibilidade abundante de registradores: permite a implementação de pilhas usando-se registradores
• Predication - instruções com predicado: permite a eliminação de desvios (branches)
Características da arquitetura EPIC
• Especulação de controle e de dados: minimiza o impacto da latência no acesso à memória
• Cache Hints: otimiza o uso da estrutura de cache multi-nível
• Prefetch de instruções: reduz a taxa de cache misses
INTERFACE DE PROGRAMAÇÃO
• Instruções têm 41 bits e são lidas da memória em conjuntos de 3 instruções (bundles)
• Campo template de 5 bits, que indica à CPU como decodificar e executar as 3 instruções do bundle
• Total: 128 bits
Grupos de instruções• Contém instruções que podem ser realizadas em paralelo
• Necessário que o compilador ou programador assembly explicitamente indique os grupos de instruções que não tenham dependências
• Podem ser disparadas sem a necessidade de verificações de hardware
• Não existe um mapeamento direto entre bundles e grupos
Expressando paralelismo
• Grupos delimitados por Stops (indicados por dois ponto-e-vírgula seguidos)
Exemplo:
ld8 r1=[r5] // primeiro grupo
sub r6=r8,r9 ;; // primeiro grupo
add r3=r1,r4 // segundo grupo
st8 [r6]=r12 // segundo grupo
Sintaxe das instruções
[qp] mnemonic[.comp] dest=srcs
• qp especifica um qualifying predicate register (registrador de predicado qualificador).
• mnemonic especifica um nome que identifica unicamente a instrução
• comp especifica um ou mais complementos
• dest representa o(s) operando(s) de destino
• srcs representa os operandos fonte
Exemplo: cmp.eq p1,p2 = r1,r2 // p1 = (r1==r2),
// p2 = (r1!=r2)
Formato e tipos de instruções
• O formato geral de uma instrução pode ser representado da seguinte forma:
Registradores• Grande número de registradores, o que diminui a freqüência de acessos à memória:
- 128 registradores de uso geral (r0-r127), de 64 bits
- 128 registradores de ponto flutuante (f0-f127), de 82 bits
- 64 registradores de predicado (p0-p63), de 1 bit
- 8 registradores de branch (b0-b7), de 64 bits
- Até 128 registradores de aplicação (ar0-ar127), de 64 bits (comumente possuem aliases)
- Instruction Pointer, de 64 bits, contém o endereço do bundle que estiver executando no momento
INTRUDUÇÃO À ARQUITETURA DO ITANIUM 2
Características do conjunto de instruções:
• Paralelismo Explícito:
- Mecanismos de sinergia (esforço simultâneo) entre o compilador e o processador;
- Recursos massivos para tomar vantagem do paralelismo no nível de instrução;
- Suporte para várias unidades de execução e portas de memória.
Paralelismo no nível de instrução (ILP)
• Habilidade de executar múltiplas instruções ao mesmo tempo
• Tratamento de instruções especiais em bundles (pacotes), com três instruções por bundle, e pode tratar 2 bundles por clock.
• Permite ao compilador explorar informação especulativa sem sacrificar a execução correta de uma aplicação.
Especulação
• Tratar operações mais cedo
• Reduz latência de memória
• Tipos de especulação: de controle e de dados
• Recovery code:
- repete o load e a cadeia de instruções dependentes para recuperar-se de uma especulação incorreta.
- Também deve ser gerado pelo compilador
Especulação de Controle
• Execução de uma operação antes do branch que a precede
• Se o novo load especulativo de controle causar uma exceção:
- a exceção é adiada (setando o bit NaT em 1) e deve ser aceita somente se a condição for verdadeira.
Especulação de Controle
if (a>b) load(ld_addr1, target1)
else load(ld_addr2, target2)
• Transforma-se em:
/* fora do caminho crítico */
sload(ld_addr1, target1)
sload(ld_addr2, target2)
/* outras operacões incluindo incluindo os usos de target1/target2 */
if (a>b) scheck(target1, recovery_addr1)
else scheck(target2, recorery_addr2)
Exemplo:
Especulação de Dados
• Execução de um load de memória antes de um store que o precede e que pode potencialmente ter dependência com ele
• Referenciados como “loads avançados”
• ALAT (Advanced Load Address Table) - usada para prover especulação de dados no Itanium. A estrutura física da ALAT possui 32 entradas e é organizada de forma fully associative.
Especulação de Dados
store(st_addr, data)
load(ld_addr, target)
use(target)
• Transforma-se em:
/* fora do caminho crítico */
aload(ld_addr, target)
/* outras operações incluindo usos do alvo*/
store(st_addr, data)
acheck(target, recovery_addr)
use(target)
Exemplo:
Predication
• Execução condicional de instruções
• Arquiteturas tradicionais: implementada através de branches.
• Itanium2: implementada através do uso de instruções com predicado (predicated instruction).
• Campo qp (qualifying predicate) de 5 bits no formato das instruções.
• Se o valor do predicado é verdadeiro (1), então a instrução atualiza o estado. Caso contrário ela geralmente se comporta como um nop.
Predication
if (a>b) c = c + 1
else d = d * e + f
Torna-se:
pT, pF = compare (a>b)
if (pT) c = c + 1 // instrução com predicado pT
if (pF) d = d * e + f // instrução com predicado pF
• Permite evitar branches e simplifica otimizações do compilador.
Exemplo:
• O compilador pode escalonar as instruções sob pT e pF para executar em paralelo
O bit NaT (Not A Thing)
• É um bit extra dos registradores de uso geral
• Indica se o conteúdo do registrador é válido
• Se o bit NaT é setado em 1, o registrador contém uma exceção adiada (deferred exception).
• Propagação dos bits NaT - se uma instrução lê um registrador fonte que tem seu bit NaT setado, os bits NaT dos registradores destino da instrução também são setados
Pilha de Registradores
• Evita salvar e restaurar registradores na chamada e retorno de procedimentos
• Conteúdo de registradores físicos é movido entre o banco de registradores e a memória sem intervenção explícita do programa
• Aparenta ser uma pilha ilimitada de registradores físicos.
• Instrução alloc - especifica o número de registradores que o procedimento espera utilizar.
Pilha de Registradores
• É feito o renomeamento do identificador do registrador virtual nas instruções através de um registrador base nos registradores físicos.
• Se registradores suficientes não estão disponíveis (stack overflow), o alloc pára (stall) o processador e salva os registradores do chamador até que o número desejado de registradores esteja disponível.
• RSE (Register Stack Engine) - mecanismo de hardware que realiza o gerenciamento.
Branching • Mecanismos para diminuir a taxa de predição
incorreta de branches e o custo (penalidade) das predições incorretas
• Instruções de predição de branches:
- usadas para comunicar de forma antecipada o endereço alvo e a localização do branch
• Compilador indica se um branch deve ser predito dinamicamente ou estaticamente
• Registradores de branch (para branches indiretos):
- endereço alvo pode ser computado mais cedo.
Rotação de Registradores
• Pipelining de software: permite executar as iterações do loop em paralelo em vez de seqüencialmente
• Renomeamento de registradores:
- provê a cada iteração o seu próprio conjunto de registradores
• Significativa redução de overhead de loop
PROCESSADOR
• O Itanium2 possui as seguintes unidades de execução:
- 6 unidades para inteiros,
- 6 unidades para multimídia,
- 2 unidades para ponto flutuante,
- 3 unidades para desvio,
- 4 unidades para load/store
PROCESSADOR
• Consegue executar instruções de 32 bits nativamente executando instruções de 64 bits
• Unidade de multimídia - pode tratar dados de 64 bits como também pacotes de dados de:
- 2 x 32 bits
- 4 x 16 bits
- 8 x 8 bits
Processamento da Instrução
• Prefetch e Fetch da Instrução:
- move linhas de instruções de caches de níveis mais altos ou memória, para a L1I
- mecanismo efetivo de redução de cache misses
• Especulativamente carrega as instruções da cache de instruções L1 em um buffer:
- capacidade de até 8 bundles de intruções
Processamento da Instrução
• Prefetch eficiente de instruções :
- Demand Prefetching - realiza automaticamente o prefetch da próxima linha consecutiva no cache L1I, se essa linha extra estiver contida dentro do cache L2.
- Streaming Prefetching - compilador pode adicionar uma dica para qualquer instrução de branch, instruindo a fazer prefetch das instruções naquele endereço.
PIPELINE
• O Itanium2 introduziu um grau avançado de diferenciação dos pipelines.
• Fila de espera (buffering) que permite que as instruções se completem fora de ordem:
- previne que instruções para inteiros tenham que esperar pelas instruções de ponto
flutuante, cujo pipeline é constituído de dois estágios a mais
• Uma falha na previsão de um desvio despende 6 ciclos adicionais
PIPELINE • Pipeline composto de 8 estágios, que podem ser
agrupados em duas fases maiores:
• front-end: 2 estágios
- (1) gera apontador de instrução, (2) coloca no bundle 0 a primeira instrução a ser executada
• back-end: 6 estágios
• (3) distribui as instruções para as unidades funcionais, (4) renomeia registradores, (5) lê registradores, (6) executa as operações, (7) detecta exceções, (8) realiza write-back
MEMÓRIA• 3 níveis de caches: - cache de instruções de primeiro nível (L1I) - cache de dados de primeiro nível (L1D) - cache unificada de segundo nível (L2) - cache unificada de terceiro nível (L3).
• A cache L1 sustenta uma taxa de 32 bytes de leitura por ciclo para suportar a taxa de fetch de 2 bundles por ciclo
MEMÓRIA
• Cache hints (dicas de cache): otimizam o uso da estrutura de cache multi-nível.
• Traz dados nas caches antes do programa precisar deles: reduz a latência efetiva de acesso à memória
• Todo load e store de memória tem um campo de 2 bits para cache hint, no qual o compilador codifica sua predição da localidade espacial e/ou temporal da área de memória sendo acessada.
Translation Lookaside Buffers (TLBs)
• Conversão de endereços virtuais para endereços reais
• O Itanium2 emprega uma TLB de dois níveis para referências de instruções (L1 ITLB e L2 ITLB) e uma TLB de dois níveis para referências de dados (L1 DTLB e L2 DTLB).
Translation Lookaside Buffers (TLBs)
• Quando uma página de tradução é trocada no L1 ITLB, todas as entradas na cache L1I pertencentes à página em questão são invalidadas. O mesmo vale para a L1 DTLB
• A política de substituição de páginas utilizadas é a LRU (Least Recently Used)
• O Itanium2 suporta páginas de tamanho 4K, 8K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M, 1GB e 4GB
• São suportados maiores endereços físicos (constituídos de 50 bits) e virtuais (constituídos de 64 bits)
Hardware Page Walker (HPW)
• O HPW é o terceiro nível de tradução de endereços.
• É um hardware que executa buscas de páginas a partir da Tabela Hash de Página Virtual (VHPT – Virtual Hash Page Table).
• Quando um miss no segundo nível da DTLB ou ITLB é encontrado, o HPW acessará (quando necessário) a cache L2, a cache L3, e finalmente a memória para obter a página de entrada
Barramentos • O barramento de dados é de 128 bits de largura e opera de forma síncrona
• Pico de largura de banda: 400 milhões de transações de memória ou 6.4 GB por segundo
Perguntas
• Maiores detalhes: www.intel.com/products/processor/itanium2/
top related