ANÁLISE DO PADRÃO DE ACESSOS À MEMÓRIA DE PROGRAMAS PARALELOS Hugo Henrique Cassettari Edson Toshimi Midorikawa EPUSP - Escola Politécnica da Universidade de São Paulo PCS - Departamento de Engenharia de Computação e Sistemas Digitais ANÁLISE DO PADRÃO DE ACESSOS À MEMÓRIA DE PROGRAMAS PARALELOS Hugo Henrique Cassettari Edson Toshimi Midorikawa EPUSP - Escola Politécnica da Universidade de São Paulo PCS - Departamento de Engenharia de Computação e Sistemas Digitais Escopo • Avaliação de Desempenho – Padrão de Acessos à Memória – Localidade de Referências • Ferramenta Desenvolvida – Visualização e Análise – Simulação baseada em Arquivos de Trace • Programação Paralela – Computação de Alto Desempenho – Multiprocessamento CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Motivação • Memória possui uma limitação teórica - “memory wall” • Alternativa: explorar localidades de referências • Técnicas de programação podem levar a uma maior localidade de acessos • Visualizar padrões de acesso de programas à memória pode ser um recurso importante CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Contexto Programa executável Ferramenta de Visualização e Análise Gerador de traces arquivo de traces tela resultados • Simulação e avaliação de sistemas de memória – Técnicas de otimização – Algoritmos de substituição de páginas – Influência da propriedade de localidade de acessos • Dificuldade em se detectar facilmente padrões de acesso à memória CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Padrões de Acesso à Memória • Refere-se a como os programas endereçam as posições de memória • Espaço virtual deve favorecer o funcionamento do sistema • Exploração de uma “região” de endereços favorece o desempenho CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Ferramenta de Visualização e Análise • Desenvolvida em Java • Módulo de pré-processamento desenvolvido em C • Disponível nas plataformas Linux e Microsoft Windows • Permite uma abordagem visual do comportamento dos programas em relação aos seus acessos à memória • Gráfico informa os endereços de memória acessados no decorrer do tempo de execução CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Janela Principal • Todos os acessos do(s) programa(s) selecionado(s) • Cada cor identifica um programa • Sobreposição de cores CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Janela Principal CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Janela de Aproximação • Janela de aproximação base – Seleção de trecho – Aproximação parcial • Janela de aproximação sucessiva – Aproximação infinita – Cópia comparativa temporária na janela de aproximação base CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Janela de Aproximação CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Estudo de Caso: Multiplicação de Matrizes • Três formas básicas de acesso aos elementos: – Acesso por linhas – Acesso por colunas – Acesso por diagonais CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Armazenamento de Matrizes em Memória • Matriz quadrada de ordem 3: a1 a4 a7 A= a2 a5 a8 a3 a6 a9 • Armazenamento na memória, em C ou Pascal: 1 2 3 4 5 6 7 8 9 a1 a2 a3 a4 a5 a6 a7 a8 a9 Página 1 Página 2 Página 3 (exemplo simplificado) CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Multiplicação de Matrizes • Algoritmo tradicional (ijk): for (i=0; i<N; i++) for (j=0; j<N; j++) for (k=0; k<N; k++) C[i][j]=C[i][j] + A[i][k]*B[k][j]; • C = A x B, sendo que: – MATRIZ A: Acesso por linhas – MATRIZ B: Acesso por colunas – MATRIZ C: Acesso por linhas = C A CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP B Multiplicação de Matrizes for (i=0; i<N; i++) for (k=0; k<N; k++) for (j=0; j<N; j++) C[i][j]=C[i][j] + A[i][k]*B[k][j]; • C = A x B, sendo que: – MATRIZ A: – MATRIZ B: – MATRIZ C: CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Multiplicação de Matrizes • Versão ikj: for (i=0; i<N; i++) for (k=0; k<N; k++) for (j=0; j<N; j++) C[i][j]=C[i][j] + A[i][k]*B[k][j]; • C = A x B, sendo que: – MATRIZ A: Acesso por linhas – MATRIZ B: Acesso por linhas – MATRIZ C: Acesso por linhas = C A B CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Multiplicação de Matrizes for (j=0; j<N; j++) for (k=0; k<N; k++) for (i=0; i<N; i++) C[i][j]=C[i][j] + A[i][k]*B[k][j]; • C = A x B, sendo que: – MATRIZ A: – MATRIZ B: – MATRIZ C: CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Multiplicação de Matrizes • Versão jki: for (j=0; j<N; j++) for (k=0; k<N; k++) for (i=0; i<N; i++) C[i][j]=C[i][j] + A[i][k]*B[k][j]; • C = A x B, sendo que: – MATRIZ A: Acesso por colunas – MATRIZ B: Acesso por colunas – MATRIZ C: Acesso por colunas = C A CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP B Multiplicação de Matrizes • Todas as possíveis permutações: = C A B C A A A B = B C = C C = = A B = B C A B CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Padrão de Acessos da Versão ijk CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Padrão de Acessos da Versão ikj CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Padrão de Acessos da Versão jki CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Versão ikj-uj-sr • Otimizações no código de forma a explorar ainda mais a hierarquia de memória • Transformação unroll-and-jam – Reúne vários acessos a uma mesma posição de matriz no loop mais interno • Transformação scalar replacement – Posições referenciadas são atribuídas a variáveis escalares a cada iteração CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Padrão de Acessos da Versão ikj-uj-sr CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Padrão de Acessos da Versão ikj-uj-sr • Padrão de acessos praticamente idêntico ao da versão ikj • Menor tempo de execução • Exploração de registradores do processador CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Tempos de Execução Desempenho das Versões Tempo de Execução (segundos) 800 700 600 500 ijk 400 ikj 300 jki 200 ikj-uj-sr 100 0 1 2 3 4 Número de CPUs (*) Matrizes de ordem 1500, executadas em uma máquina SMP com 4 processadores Pentium II Xeon de 400 MHz e 256 MB de memória principal, sistema operacional Linux. CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Versão Atual da Ferramenta • Diferenciação entre leitura/gravação e processadores Versão ijk com 2 processadores Proc. 1 - Leitura Proc. 1 - Gravação Proc. 2 - Leitura Proc. 2 - Gravação CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Trabalhos Futuros • Utilização de programas de estudo maiores • Análise aprofundada do sistema de memória virtual • Suporte a arquivos de trace compactados • Suporte a programas MPI (processamento distribuído) CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP Contato • Hugo Henrique Cassettari: [email protected] • Edson Toshimi Midorikawa: [email protected] • ESCOLA POLITÉCNICA DA USP Departamento de Engenharia de Computação e Sistemas Digitais Laboratório de Arquitetura e Software Básico Av. Prof. Luciano Gualberto, travessa 3, 158, Cidade Universitária CEP: 05508-900, São Paulo-SP CBComp 2002 - Análise do Padrão de Acessos à Memória de Programas Paralelos / EPUSP