340 likes | 478 Views
Experiments with Strassen’s Algorithm: from sequential to parallel. paralela e. Felipe L. Severino Análise e Desenvolvimento de algoritmos. Sumário. Introdução: Multiplicação de Matrizes; Strassen; Winograd; Proposta do artigo; Trabalho realizado; Paralelização; Análises; Resultados;
E N D
Experiments with Strassen’s Algorithm: from sequential to parallel paralela e Felipe L. Severino Análise e Desenvolvimento de algoritmos
Sumário • Introdução: Multiplicação de Matrizes; • Strassen; • Winograd; • Proposta do artigo; • Trabalho realizado; • Paralelização; • Análises; • Resultados; • Considerações finais.
Artigo • Experiments With Strassen’s Algorithm: From Sequential to Parallel • Autores: F. Song, J. Dongarra and S. Moore. • Proceedings: Parallel and Distributed Computing and Systems (PDSC 2006).
Multiplicação de Matrizes • Operação básica em computação científica; • Algoritmo trivial de multiplicação de matrizes consiste em três laços: • Esse algoritmo possui complexidade Θ(n³);
Multiplicação de Matrizes • Pode ser escrito de forma recursiva: • Complexidade permanece Θ(n³); • T(n) = 8T(n/2)+Θ(n²);
Algoritmo de Strassen • Primeiro algoritmo para multiplicação de matrizes a ter complexidade < Θ(n³); • Efetua, recursivamente, 7 multiplicações e Θ(n²) somas e adições; • Algoritmo original: 7 multiplicações e 18 adições;
Algoritmo de Strassen Phase 1 Phase 2 Phase 3 Phase 4
Algoritmo de Strassen • Complexidade: T(n)=7T(n/2)+ Θ(n²); =Θ(nlg 7); =Θ(n2,81); • Melhor que algoritmo clássico para matrizes grandes (estudo indica o ponto de corte 12);
Algoritmo de Winograd • Também chamado de Strassen-Winograd; • Variação do Strassen tradicional; • Utiliza 7 multiplicações e 15 adições/subtrações; • Não altera significativamente a complexidade (continua sendo Θ(nlg 7));
Proposta do Artigo • Comparar implementação Winograd com biblioteca matemática ATLAS DGEMM e verificação do ponto de corte; • Paralelização (strassen tradicional): • NetSolve (Workflow); • MPI: tarefas; • MPI: dados (na verdade, usando ScaLAPACK). • Análise do uso de memória dos algoritmos paralelos acima;
Trabalho realizado • Implementação sequencial de Strassen e Winograd; • Paralelização de tarefas utilizando Strassen e Winograd; • Outro modelo de Paralelização do Strassen e Winograd; • Análises;
Paralelização de tarefas • Strassen
Paralelização de tarefas • Winograd
Paralelização • Outro modelo de paralelização é baseado no modelo mestre-escravo; • O processo pai irá enviar duas matrizes para cada filho, que irá processar cada uma dessas matrizes e enviar o resultado de volta ao pai;
Paralelização • Caso seja executado com 7 processos (como foi o caso) é idêntico ao divisão e conquista; • Chamadas recursivas: caso existam processos suficientes, cada filho será pai de novos processos.
Análises • Uso de memória; • Troca de mensagens • Quantidade e tamanho das mensagens em cada uma das implementações;
Uso de memória • Strassen sequencial: • Winograd sequencial: se n > 12 se n < 12 se n > 12 se n < 12
Uso de memória • Strassen paralelismo de tarefas: • Primeiro nível (processo com maior carga): • 2n+3(n/4) • Demais níveis = strassen sequencial; • Winograd paralelismo de tarefas: • Primeiro nível (processo com maior carga): • 3n+3(n/4) • Demais níveis = winograd sequencial;
Uso de memória • Outro modelo de paralelização: • Divisão na carga, varia de acordo com o número de processos; • 7 processos: • Primeiro nível: • Proc 0: 1T(n/2)+(8n+n/4) (Strassen); • Proc 0: 1T(n/2)+(7n+n/2) (Winograd); • Outros processos 2x(n/4); • Demais níveis = strassen sequencial;
Troca de mensagens • Strassen paralelismo de tarefas: • Apenas um nível de troca de mensagens: • 2 mensagens de tamanho n (broadcast); • 11 mensagens de tamanho n/4 (ponto a ponto); • Winograd paralelismo de tarefas: • Apenas um nível de troca de mensagens: • 2 mensagens de tamanho n (broadcast) • 14 mensagens de tamanho n/4 (ponto a ponto);
Troca de mensagens • Outro modelo: • Varia dependendo da quantidade de processos; • Com 7 processos haverão 6 filhos que deverão receber duas matrizes (cada um) do processo 0 e devolver uma matriz de resposta; • Sendo apenas um nível de troca de mensagens: • 18 mensagens de tamanho n/4;
Resultados • Ambiente de teste • Artigo: • Cluster Linux com 32 nodos • Dual PentiumIV Xeon 2.4 GHz • 2 GB RAM; • UFRGS: • 1 Xeon 2.0 GHz (dual core multi-threaded); • 3 GB RAM; • 50 execuções de cada programa, média aritmética simples; • Programas MPI (MPICH2) executados com 7 processos;
Considerações finais • Não foi apresentado comparativo do paralelo com o sequencial no artigo; • Foi possível obter desempenho teórico similar (uso de memória); • Diferenças de tempo de execução podem ser explicados pela diferença do hardware utilizado além de: • Matrizes pequenas: custo da troca de mensagens; • Matrizes grandes: muita carga sobre o processador;
Considerações finais • Facilidade na descrição da paralelização (exceto de dados); • Dificuldades nas bibliotecas (instalação, compatibilidade com sistema, entre outros) impossibilitaram comparativo com ScaLAPACK e ATLAS;
Experiments with Strassen’s Algorithm: from sequential to parallel paralela e Felipe L. Severino Análise e Desenvolvimento de algoritmos