180 likes | 264 Views
Arquitectura de Computadores II. Ano lectivo 2003/2004 Nuno Lau (lau@det.ua.pt). Reduzir hit time. Caches simples e pequenas Acesso à cache em pipeline (aumenta o débito, não a latência) Trace caches Evitar a conversão de endereço virtual para endereço físico. Reduzir miss rate.
E N D
Arquitectura de Computadores II Ano lectivo 2003/2004 Nuno Lau (lau@det.ua.pt)
Reduzir hit time • Caches simples e pequenas • Acesso à cache em pipeline (aumenta o débito, não a latência) • Trace caches • Evitar a conversão de endereço virtual para endereço físico
Reduzir miss rate • Blocos maiores • Mais associatividade • Victim caches • Pequenas caches totalmente associativas que armazenam blocos retirados da cache • Prefetching • Por hardware ou controlado por software • Optimizações por software
Reduzir miss penalty • Early restart/critical word first • Non-blocking caches • Caches com vários níveis • Cache L1 pequena e rápida • Velocidade é crítica • Cache L2 grande • Velocidade afecta apenas o miss penalty de L1 • Reduzir o miss rate global
2 níveis de cache • tempo m. acesso = hit timeL1+miss rateL1*miss penaltyL1 • miss penaltyL1 = hit timeL2 + miss rateL2 * miss penaltyL2 • Miss rateglobal = miss rateL1 * miss rateL2 Se em 1000 acessos existirem 40 misses em L1 e 20 em L2 quais os miss rates de L1, L2 e global?
Desempenho da cache multi-nível • Processador com CPI base de 1, frequência de 500MHz, tempo de acesso à memória de 200ns, miss rate na cache de nível 1 de 5% e acesso em 1 ciclo. Qual o speedup se a cache de nível 2 tem um tempo de acesso de 20 ns e reduzir o miss rate para 2%? miss penalty = 200ns/2ns = 100 ciclos CPI = 1 + memory stall cycles/instrução = 1 + 5%*100 = 6 hit timeL2 = 20/2 = 10 ciclos CPI = 1 + 5%*10 + 2%*100 = 3.5 speedup = 6/3.5 = 1.7
Trace cache • Aumenta a localidade espacial dos dados da cache • No mesmo bloco da cache podem existir endereços não adjacentes • Blocos da trace cache capturam o padrão de acesso dinâmico às instruções • Mais do que 1 basic block, mais do que 1 salto condicional com previsão podem coexistir no mesmo bloco • Melhor utilização do espaço para dados • Pentium 4 coloca a trace cache depois da descodificação. Armazena na trace cache instruções já descodificadas (uops)
Exemplos • Pentium4 • DL1 8KB (16KB 90nm), 64bytes, 4-way (8-way 90nm), write-through • IL1 Trace cache 12Kuops • L2 única, 256KB (1MB 90nm), 128 bytes, 8-way, non-blocking • AMD Athlon XP • DL1 e IL1 64KB, 64 bytes, 2-way • L2 única 512KB, 16-way • Alpha 21264 • DL1 e IL1 64KB, 64 bytes, 2-way, write-back • L2 várias configurações • Itanium2 • DL1 16KB, 64 bytes, 4-way, write-through;IL1 16KB, 64 bytes, 4-way • L2 256KB, 128 bytes, 8-way, write-back, non-blocking • L3 3MB, 128 bytes, 12-way, write-back
Optimizações por software • Agrupamento de dados • Dados que são acedidos na mesma zona do código devem ser colocados na mesma zona de memória int x[10000],y[10000] for(i=0;i<10000;i++) soma += x[i] + y[i] struct {int x,y;}a[10000] for(i=0;i<10000;i++) soma += a[i].x + a[i].y Aumentar a localidade espacial
Optimizações por software • Reordenamento de ciclos • Acesso à memória deve ser realizado de forma sequencial • Ordem de ciclos encadeados deve ser considerada for(j=0;j<100;j++) for(i=0;i<2500;i++) x[i][j] = 3*x[i][j] for(i=0;i<2500;i++) for(j=0;j<100;j++) x[i][j] = 3*x[i][j] Aumentar a localidade espacial
Optimizações por software • Fusão de ciclos • Acesso à memória deve ser realizado de forma sequencial • Agrupar sequências de ciclos for(j=0;j<10000;j++) x[i] = 3*y[i] + c[i] for(j=0;j<10000;j++) z[i] = x[i] + c[i] for(j=0;j<10000;j++) { x[i] = 3*y[i] + c[i] z[i] = x[i] + c[i] } Aumentar a localidade temporal
Optimizações por software • Cálculo por blocos • Reorganizar ordem das operações de forma a que o conjunto de dados de trabalho numa fase caiba na cache • Realizar o máximo de operações em cada conjunto antes de passar para o próximo • Ciclos j e k • Lêem toda a matriz b • Lêem N elementos da mesma linha da matriz a • Escrevem em 1 linha da matriz x • Pior caso 2N3+N2misses • Realizar as operações em submatrizes for(i=0; i<N; i++) for(j=0; j<N; j++) { r = 0; for(k=0; k<N; k++) r + =a[i][k]*b[k][j]; x[i][j]=r; }
Optimizações por software • Cálculo por blocos • Realizar as operações em submatrizes • B é o factor de bloco for(jb=0; jb<N; jb+=B) for(kb=0; kb<N; kb+=B) for(i=0; i<N; i++) for(j=jb; j<min(jb+B,N); j++) { r=0; for(k=kb; k<min(kb+B,N); k++) r+=a[i][k]*b[k][j]; x[i][j]+=r; }
Organização da memória • Latência (Modelo simplificado) • Enviar endereço • Esperar por dados • Receber dados • Sistema de memória • Latência • Estrutura da cache • Interligação CPU-cache, cache-memória • A organização do sistema de memória pode reduzir a latência na leitura de vários endereços consecutivos
Organização da memória • Latência (Modelo simplificado) • Enviar endereço 4 ciclos • Esperar por dados 56 ciclos • Receber dados 4 ciclos CPU Cache com blocos de 4 palavras Miss penalty=? 32 cache Miss penalty = 4*4 + 4*56 + 4*4 = 256 ciclos 32 Memória
Organização da memória • Aumentar a largura da memória e do barramento de acesso à memória CPU Cache com blocos de 4 palavras Miss penalty=? 32 cache Miss penalty = 4 + 56 + 4 = 64 ciclos 32*4 Memória
Organização da memória • Aumentar apenas a largura da memória CPU Cache com blocos de 4 palavras Miss penalty=? 32 cache Miss penalty = 4 + 56 + 4*4 = 76 ciclos 32 banco 0 banco 1 banco 2 banco 3