340 likes | 484 Views
This article explores the transition from sequential to parallel implementations of Strassen's algorithm for matrix multiplication, revealing its efficiency compared to traditional methods. We analyze the original Strassen approach and its Winograd variant, comparing their implementations using the ATLAS DGEMM library. The study includes a thorough investigation of task parallelization methods, memory usage, and message passing in both algorithms. Results from tests conducted on a Linux cluster demonstrate the performance benefits of these parallelization techniques, although hardware differences affect execution times.
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