Trace caches: alternativa inteligente à cache de instruções Danilo Lacerda RA:
BenchmarkBranch tomados %Tam. médio do bloco básico Número de instruções entre branch tomados Eqntott86.2% Espresso63.8% Xlisp64.7% Gcc67.6% Sc70.2% Compress60.9% Benchmark SPEC92 para inteiros Um bloco básico é uma seqüência de instruções e apenas a última instrução é um desvio
Trace caches Em computadores superescalares temos um alto grau de paralelismo, unidades funcionais são duplicadas e é possível a execução paralela de instruções. Aumentando a quantidade de instruções decodificadas por ciclo podemos aumentar o desempenho. Assim, além de tentarmos preencher unidades funcionais ou recursos ociosos, também temos mais instruções para procurar por paralelismo. Temos duas alternativas: Aumentar o tamanho do bloco básico, diminuindo a freqüência de desvios. Ou então melhorar os algoritmos de predição de branch por ciclo, de modo que podemos decodificar em um ciclo vários blocos básicos como se fossem em seqüência. A trace cache captura e armazena seqüências de instruções (traces) durante o fetch das instruções, caracterizadas pelo endereço da primeira instrução e a saída do preditor de branch. Durante a execução se estas seqüências se repetirem o fetch da instrução é feito da trace cache.
Fluxo de instruções carregadas Bloco Básico Branch tomado Branch não tomado PC: 1800 tntn tt Trace cache 1800tt Adiciona a nova seqüência à trace cache Predição de branch: tt Trace cache 1800tt Consulta a trace cache procurando 1800tt Legenda: Seqüência encontrada na trace cache, que entrega para o decodificador.
Trace caches no Pentium 4 Substitue a cache de instrução convencional, arquitetura NetBurst, pela trace cache. Foi essencial para conseguirem aumentar a freqüência dos processadores, já que as PLAs (programmable logic arrays) que faziam a decodificação de instruções IA-32 em micro-operações não conseguiu suprir a alta demanda por instruções por ciclo. Armazena na trace cache micro-operações e não instruções IA-32. A trace cache armazena até micro-operações, e tem auxilio de uma ROM para decodificar instruções IA- 32 mais complexas, ou seja, são representadas por um grande número de micro-operações.
Desempenho Na proposta original de Rotenberg este simulou o comportamente das trace caches e obteve um ganho médio de 28% comparado com outros mecanismos de fetch de instruções. No mestrado de Sung, este analisou que alguns parâmetros e algoritmos da trace cache podiam ser otimizados e obteve um ganho médio de desempenho de 67,9% para benchmarks de inteiros e 16,3% para benchmarks de ponto- flutuante.
Fluxo de instruções carregadas Bloco Básico Branch tomado Branch não tomado PC: 1800 tntn tt Adiciona a nova seqüência à trace cache: 1800tt Predição de branch: tn Trace cache 1800tt Consulta a trace cache procurando 1800tn Legenda: Seqüência parcial encontrada na trace cache, que entrega para o decodificador as instruções dos 2 primeiros blocos básicos |8600 Acertos parciais