técnicas para desenvolvimento e aceleração de códigos
TRANSCRIPT
![Page 1: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/1.jpg)
Minicurso LNCC 2014
Técnicas para desenvolvimento e aceleração de códigos
científicos
Prof. Edson Borin
Instituto de Computação
UNICAMP
![Page 2: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/2.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Sobre o minicurso
Segunda Terça Quarta Quinta Sexta
Introdução Perfilamento - Contagem de tempo
Otimizações simples / compilação
Perfilamento - Detecção de código quente
GDB
Organização de processadores modernos
Otimização de acesso a dados
Bibliotecas otimizadas SVN + CMake Valgrind
Introdução ao laboratório
Vetorização de código
![Page 3: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/3.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Agenda
• Perfilamento – Contagem de tempo
• Otimização de acesso a dados
• Atividade de laboratório
![Page 4: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/4.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Contagem de Tempo
Várias abordagens: • /usr/bin/time ./my_app.bin • gettimeofday() • rdtsc • bibliotecas: PAPI, ...
![Page 5: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/5.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Contagem de Tempo
Ferramenta time: /usr/bin/time –p ./my_prog.bin!real 0.62!user 0.55!sys 0.07
![Page 6: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/6.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Contagem de Tempo
gettimeofday() – UNIX-like systems #include <sys/time.h>!
double mysecond() {! struct timeval tp;! struct timezone tzp;! gettimeofday(&tp,&tzp);! return ((double) tp.tv_sec + ! (double) tp.tv_usec * 1.e-6 );!}
![Page 7: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/7.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Contagem de Tempo
rdtsc – Instrução em hardware !unsigned long long getticks(void)!{! unsigned a, d;! asm("cpuid");! asm volatile("rdtsc" : "=a" (a), "=d" (d));! return (((ticks)a) | (((ticks)d) << 32));!}!
![Page 8: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/8.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Erros aleatórios
• Estado atual ou atividades paralelas no sistema podem afetar o tempo de execução.
• Solução: executar múltiplas vezes e analizar a distribuição dos resultados.
![Page 9: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/9.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Erros aleatórios Metodologia utilizada nos resultados apresentados no minicurso:
for(i=0; i<10; i++) {!!clean_caches(); // limpa caches!!t = mysecond(); // tempo em segundos!!res = compute();!!t = mysecond()-t;!!min_t=MIN(t,min_t);!
}!
![Page 10: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/10.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Limpando as caches de dados
#define CACHE_SZ (8*1024*1024)!
char buffer[CACHE_SZ];!
int clean_caches(void) {!!int i, acc = 0;!
!for (i=0; i<CACHE_SZ;i++) {! acc += buffer[i];!!}!!return acc;!
}!
![Page 11: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/11.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Agenda
• Perfilamento – Contagem de tempo
• Otimização de acesso a dados
• Atividade de laboratório
![Page 12: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/12.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Largura de banda da memória do meu Laptop (Banda):
Memória: 2 x 2 GB (1333 MHz DDR3 SDRAM)
Banda = 1333 MT/s x 64 bits x 2 (canais)
= 10666 MB/s x 2
= 21.3 GB/s
![Page 13: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/13.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Largura de banda da memória do meu Laptop (Banda):
Memória: 2 x 2 GB (1333 MHz DDR3 SDRAM)
Banda = 1333 MT/s x 64 bits x 2 (canais)
= 10666 MB/s x 2
= 21.3 GB/s Será que é o suficiente para manter o
processador ocupado?
![Page 14: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/14.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Flops: # de operações de ponto-flutuante por segundo Dados do meu Laptop: (i7-2677M) - 2 Cores - 1.8 GHz
- ALUs: 8 operações FP (DP) por ciclo 4 somas + 4 multiplicações
- Total = 2 x 1.8 x 8 = 28.8 GFlops
![Page 15: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/15.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados ALUs: 14.4 GFlops x 2 cores = 28.8 GFlops
Memória: 21.3 GB/s
• DP FP = 8 bytes, logo Memória = 2.66 G FP / s
![Page 16: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/16.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados ALUs: 14.4 GFlops x 2 cores = 28.8 GFlops
Memória: 21.3 GB/s
• DP FP = 8 bytes, logo Memória = 2.66 G FP / s
< 11% do # de operações nas ALUs
![Page 17: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/17.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados
A largura de banda das caches é maior!
Memória
L2
L1
Registradores ALU
21.3 GB/s
14.4 GFlops
CPU
![Page 18: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/18.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados
A largura de banda das caches é maior!
Memória
L2
L1
Registradores ALU
21.3 GB/s
14.4 GFlops
CPU
Maximizar o uso das caches!
![Page 19: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/19.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: produto interno
sum = 0.0;
for (i=0; i<N; i++)
sum += A[i] x B[i];
![Page 20: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/20.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: produto interno
sum = 0.0;
for (i=0; i<N; i++)
sum += A[i] x B[i];
Não há reuso de dados.
![Page 21: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/21.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: produto interno
sum = 0.0;
for (i=0; i<N; i++)
sum += A[i] x B[i];
Qual o desempenho esperado?
Lembrando que pico = 21.3 GB/s e 14.4 GFlops/s
Não há reuso de dados.
![Page 22: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/22.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Experimento:
while(n<10) {!!clean_caches();!!t = mysecond(); // tempo em segundos!!res = produto_interno(a,b);!!t = mysecond()-t;!!min_t=MIN(t,min);!
}!
![Page 23: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/23.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: produto interno
sum = 0.0;
for (i=0; i<N; i++)
sum += A[i] x B[i];
Banda = (2 x SIZE x 8) / min_t = ~6.1 GB/s - pico = 21.3 GB/s
Flops = (2 x SIZE) / min_t = ~0.76 GFLOPS - pico: 14.4 GFlops
![Page 24: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/24.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: produto interno
sum = 0.0;
for (i=0; i<N; i++)
sum += A[i] x B[i];
Banda = (2 x SIZE x 8) / min_t = ~6.1 GB/s - pico = 21.3 GB/s
Flops = (2 x SIZE) / min_t = ~0.76 GFLOPS - pico: 14.4 GFlops
Limitado pela memória.
“Memory Bound”
![Page 25: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/25.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes
for (i=0; i<N; i++)
for (j=0; j<N; j++)
A[i][j] = B[j][i]
![Page 26: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/26.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes
for (i=0; i<N; i++)
for (j=0; j<N; j++)
A[i][j] = B[j][i]
Qual o desempenho esperado? Lembrando que: - Pico: 21.3 GB/s e 14.4 GFlops/s - Prod. Interno: ~6.1 GB/s
Também não há reuso de
dados!
![Page 27: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/27.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes
for (i=0; i<N; i++)
for (j=0; j<N; j++)
A[i][j] = B[j][i]
Qual o desempenho esperado? Lembrando que: - Pico: 21.3 GB/s e 14.4 GFlops/s - Prod. Interno: ~6.1 GB/s
Apenas 0.93 GB/s
![Page 28: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/28.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][0] = b[0][0];
=
1 2 3
...
N
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 29: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/29.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][0] = b[0][0];
=
1 ? ? 1 2 3
...
N
?
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 30: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/30.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][0] = b[0][0];
=
1 ? ? 1 2 3
...
N
?
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 31: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/31.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][1] = b[1][0];
=
1 2 ? 1 2 3
...
N
?
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 32: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/32.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][2] = b[2][0];
=
1 2 3 1 2 3
...
N
?
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 33: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/33.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][3] = b[3][0];
=
1 2 3 1 2 3
...
N
4
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 34: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/34.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][4] = b[4][0];
=
1 2 3 1 2 3
...
N
4 5
4 5
? ? ?
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
![Page 35: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/35.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[0][N-1] = b[N-1][0];
=
1 2 3 ... N 1 2 3
...
N
4 5
4 5
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
Linhas antigas são removidas da
cache! (LRU)
![Page 36: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/36.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
B A
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
a[1][0] = b[0][1];
=
1 2 3 ... N 1 2 3
...
N
4 5
4 5
9 ? ? ? 9
Suponha que a linha de cache comporte 32 bytes => 4 números de ponto flutuante (precisão dupla)
Cada linha será trazida 4
vezes!!!
Esta linha não está mais na
cache!
![Page 37: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/37.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
No exemplo anterior (cache line = 32 bytes)
# acessos esperado: N2 + N2
# acessos realizado: N2 + 4 x N2
![Page 38: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/38.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Problema!)
No exemplo anterior (cache line = 32 bytes)
# acessos esperado: N2 + N2
# acessos realizado: N2 + 4 x N2
No meu laptop (cache line = 64 bytes)
# acessos esperado: N2 + N2
# acessos realizado: N2 + 8 x N2 (4.5x mais acessos)
![Page 39: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/39.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Solução!)
Blocagem!
- Mudar a ordem de acesso = A B
![Page 40: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/40.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Solução!)
Blocagem!
- Mudar a ordem de acesso = A B
![Page 41: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/41.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Solução!)
Blocagem!
- Mudar a ordem de acesso = A B
![Page 42: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/42.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Solução!)
Blocagem!
- Mudar a ordem de acesso = A B
![Page 43: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/43.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (Solução!)
Blocagem!
- Mudar a ordem de acesso = A B
Preenchemos a linha de cache antes dela ser
removida!
![Page 44: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/44.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (blocagem)
for(i=0;i<N;i++)!
for(j=0;j<N;j++)!
A[i][j]=B[j][i]!
![Page 45: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/45.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (blocagem)
for(i=0; i<N; i++)!
for(jk=0; jk<N; jk+=BLK)!
for(j=jk; j<(jk+BLK); j++)!
A[i][j] = B[j][i]!
for(i=0;i<N;i++)!
for(j=0;j<N;j++)!
A[i][j]=B[j][i]!
Strip-mining
![Page 46: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/46.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes (blocagem)
for(jk=0; jk<N; jk+=BLK)!
for(i=0; i<N; i++)!
for(j=jk; j<(jk+BLK); j++)!
A[i][j] = B[j][i]!
for(i=0;i<N;i++)!
for(j=0;j<N;j++)!
A[i][j]=B[j][i]!
Loop interchange
![Page 47: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/47.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: transposição de matrizes
Pico: 21.3 GB/s
Cópia de matrizes: ~6.1 GBytes/s
Banda sem blocagem: ~0.93 GBytes/s
Banda com blocagem: ~ 5.26 GBytes/s
![Page 48: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/48.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: multipicação de matrizes
for (i=0; i<N; i++)
for (j=0; i<N; j++)
for (k=0; k<N; k++)
C[i][j] += A[i][j] x B[j][i]
![Page 49: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/49.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: multipicação de matrizes
for (i=0; i<N; i++)
for (j=0; i<N; j++)
for (k=0; k<N; k++)
C[i][j] += A[i][j] x B[j][i]
3 x N3 acessos a 3 x N2 posições de memória
=> cada elemento é reutilizado N-1 vezes!!!
Há bastante reuso de dados.
![Page 50: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/50.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Exemplo: multipicação de matrizes
for (i=0; i<N; i++)
for (j=0; i<N; j++)
for (k=0; k<N; k++)
C[i][j] += A[i][j] x B[j][i]
3 x N3 acessos a 3 x N2 posições de memória
=> cada elemento é reutilizado N-1 vezes!!!
Reutilizar o dado antes do
mesmo deixar a cache!!!
Blocagem!
![Page 51: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/51.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP)
Processor
Core 2Core 1 Core 3 Core 4
MemoryMain
MemoryController
![Page 52: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/52.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP)
Processor
Core 2Core 1 Core 3 Core 4
MemoryMain
MemoryController
Não escala bem!
![Page 53: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/53.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP) Primeiros multi-cores - 2 e 4 cores => SMP Ok! Recentemente - 16, 32, 64 cores => SMP Não escala! - Mudança para ccNUMA (cache-coherent Non-Uniform Memory Access)
![Page 54: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/54.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Processor
Core 2Core 1 Core 3 Core 4
MemoryMain
MemoryController
SMP
Otimizações de Acesso a Dados
Memory Controller
Core 3
Core 1 Core 2
Core 4
MemoryMemory
MemoryBank 3
Bank 1 Bank 2
MemoryBank 4cc
NU
MA
ccNUMA
SMP
![Page 55: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/55.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP) ccNUMA: - Acesso à memória é transparente para o
usuário - Localização do dado no sistema pode afetar o
desempenho (acesso não uniforme)
![Page 56: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/56.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP) Exemplo: • SW: Decomp. Cholesky em 64 matrizes diferentes • HW: 64-core Opteron 6282 SE • ccNUMA
• 8 Bancos de Memória conectados a 8 nós • Cada nó possui 8 núcleos
![Page 57: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/57.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados
1.0!
1.7!
2.7!
3.9!
3.1!2.8! 2.8!
0!
1!
2!
3!
4!
1! 2! 4! 8! 16! 32! 64!
Spee
dup!
Number of Threads!
Sistemas com múltiplos núcleos. (SMP) Resultados Iniciais:
![Page 58: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/58.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Memory Bank 0
C 0
C 7
...
Memory Bank 1
C 8
C 15
...
Memory Bank 7
C 48
C 63
...
...
Thread 1
![Page 59: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/59.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Memory Bank 0
C 0
C 7
...
Memory Bank 1
C 8
C 15
...
Memory Bank 7
C 48
C 63
...
...
Thread 1
malloc
...
...
![Page 60: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/60.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Memory Bank 0
C 0
C 7
...
Memory Bank 1
C 8
C 15
...
Memory Bank 7
C 48
C 63
...
...
Thread 1
malloc
...
...
... join
![Page 61: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/61.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Solução #1: Intercalar os dados
• Ferramenta: numactl
numactl –interleave=all ./my_app.exe
Informa ao OS que os dados devem ser distribuidos de
forma circular entre os bancos de memória.
![Page 62: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/62.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Memory Bank 0
C 0
C 7
...
Memory Bank 1
C 8
C 15
...
Memory Bank 7
C 48
C 63
...
...
Thread 1
malloc
... join
...
...
...
![Page 63: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/63.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
1.0!2.0!
3.6!
6.3!
9.3!10.4! 10.6!
1.0!1.7!
2.7!3.9!
3.1! 2.8! 2.8!
0!
2!
4!
6!
8!
10!
12!
1! 2! 4! 8! 16! 32! 64!
Spee
dup!
Number of Threads!
interleave policy!
first-touch policy!
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP) Resultados Após o Interleave:
![Page 64: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/64.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados
Solução #2: Distribuir os dados manualmente Usar a biblioteca libnuma para: • Alocar os dados das matrizes explicitamente em
cada banco de memória • Restringir o escalonamento de threads para o conjunto de núcleos próximo ao banco que contém a
matriz a ser decomposta pela thread
![Page 65: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/65.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados Memory Bank 0
C 0
C 7
...
Memory Bank 1
C 8
C 15
...
Memory Bank 7
C 48
C 63
...
...
Thread 1
malloc
... join
![Page 66: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/66.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
6.3! 9.3! 10.4! 10.6!
2.7! 3.9! 3.1! 2.8! 2.8!1.0! 2.0!
3.9!
7.7!
14.8!
24.0!
30.9!
0!
5!
10!
15!
20!
25!
30!
35!
1! 2! 4! 8! 16! 32! 64!
Spee
dup!
Number of Threads!
interleave policy!
first-touch policy!
libnuma!
Otimizações de Acesso a Dados Sistemas com múltiplos núcleos. (SMP)
![Page 67: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/67.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Otimizações de Acesso a Dados
Sistemas com múltiplos núcleos. (SMP) Observações: • Tendências indicam que os futuros multicores
serão ccNUMA • Extrair bom desempenho destas máquinas
pode exigir gerenciamento de dados explícito
![Page 68: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/68.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Conclusões
• Tráfego de dados no sistema pode determinar o desempenho (“memory bound”).
• Muito comum em simulações numéricas! • Otimizações de acesso a dados são
fundamentais nestes casos.
![Page 69: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/69.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Agenda
• Perfilamento – Contagem de tempo
• Otimização de acesso a dados
• Atividade de laboratório
![Page 70: Técnicas para desenvolvimento e aceleração de códigos](https://reader031.vdocuments.mx/reader031/viewer/2022022807/621b32eb8e8a730de36bec85/html5/thumbnails/70.jpg)
Técnicas para desenvolvimento e aceleração de códigos científicos – Edson Borin
Atividade de laboratório
www.ic.unicamp.br/~edson/disciplinas/lncc14/index.html