A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Técnicas de orientação ao objeto para computação científica paralela

Apresentações semelhantes


Apresentação em tema: "Técnicas de orientação ao objeto para computação científica paralela"— Transcrição da apresentação:

1 Técnicas de orientação ao objeto para computação científica paralela
Instituto de Física de São Carlos - IFSC Universidade de São Paulo - USP Técnicas de orientação ao objeto para computação científica paralela Francisco Aparecido Rodrigues Orientador: Gonzalo Travieso

2 Introdução

3 INTRODUÇÃO Introdução MOTIVAÇÃO
A construção de programas paralelos que ofereçam alto desempenho é complexa A interface de uso que muitas bibliotecas numéricas paralelas oferecem é pouco amigável OBJETIVOS Desenvolver uma biblioteca paralela que ofereça alto desempenho e que possua uma interface amigável INTRODUÇÃO

4 INTRODUÇÃO Computação paralela
Os computadores paralelos são usados para suprir as necessidades que os computadores seqüenciais não conseguem. “Um computador paralelo é uma coleção de elementos de processamento que se comunicam e cooperam na resolução de grandes problemas de forma rápida” (Almasi)‏ INTRODUÇÃO

5 Clusters Grupo de computadores completos interconectados com sistema operacional distribuído Oferecem Escalabilidade absoluta Escalabilidade incremental Alta disponibilidade Melhor relação custo desempenho INTRODUÇÃO

6 INTRODUÇÃO Desenvolvimento de softwares paralelos Maneira mais comum:
Utilizando uma linguagem seqüencial conjuntamente com uma biblioteca paralela que permita a troca de mensagens. PVM – Paralell Virtual Machine MPI – Message Passing Interface INTRODUÇÃO

7 Bibliotecas Paralelas

8 MPI MPI – Message Passing Interface
Padrão de biblioteca de passagem de mensagem para sistemas paralelos. Baseado na troca de mensagem entre processadores através das diretivas send/receive O MPI é baseado em 4 conceitos: Processos Comunicadores Mensagens Tipos de dados O programador deve especificar: Instante em que uma comunicação deve ocorrer Quais tipos de dados devem ser enviados A comunicação é bloqueante ou não? MPI

9 BIBLIOTECAS NUMÉRICAS
BLAS (Basic Linear Algebra Subprogram)‏ LAPACK (Linear Algebra Package)‏ Biblioteca de Álgebra Linear para cálculo de problemas de autovalores, sistemas lineares e problemas de mínimos quadrados para workstations e sistemas SPMD, SCALAPACK (Scalabe LAPACK)‏ Biblioteca de Álgebra Linear análoga ao LAPACK para computadores de memória distribuída. BIBLIOTECAS NUMÉRICAS

10 ScaLAPACK Características
Bibliotecas de rotinas similares às do LAPACK Escrito em FORTRAN Utiliza passagem de mensagem via MPI ou PVM Oferece alta perfomance em rotinas de álgebra linear em computadores MIMD Necessita de duas blibliotecas adicionais: PBLAS (Parallel BLAS) Contém rotinas básicas de álgebra linear para processamento paralelo BLACS (Basic Linear Algebra Communication Subprogram) Biblioteca de rotinas sícronas de send/receive que usam passagem de mensagem ScaLAPACK

11 ScaLAPACK Estrutura ScaLAPACK PBLAS LAPACK BLACS BLAS MPI/PVM GLOBAL
LOCAL LAPACK BLACS BLAS ScaLAPACK MPI/PVM

12 Grade de processadores
ScaLAPACK

13 ScaLAPACK Exemplo P0 P1 P2 P3 Distribuição da Matriz
Distribuição em blocos 1 x 1 Exemplo: N = 16 e P = 4 Grade: 2 X 2 P0 P1 MATRIZ GRADE A11 A12 A13 A14 A21 A22 A23 A24 A31 A32 A33 A34 A41 A42 A43 A44 A11 A13 A12 A14 A31 A33 A32 A34 A21 A23 A22 A24 A41 A43 A42 A44 ScaLAPACK P2 P3

14 ScaLAPACK Utilização Passos para chamar as rotinas
1 - Inicializar a grade de processadores CALL SLINIT( ... ) CALL BLACS_GRIDINFO( ...) 2 - Distribuir a matriz na grade de processadores e inicializar os descritores de array CALL DESCINIT( ... ) 3 - Chamar a rotina do ScaLAPACK CALL PDSYEVX( ... ) 4 - Liberar a grade de processos CALL BLACS_EXIT( ... ) ScaLAPACK

15 ScaLAPACK Rotinas Divididas em três grupos Driver Routines
Resolvem um problema completamente. Equações lineares, problemas de mínimos quadrados, problemas de autovalores, etc. Computational Routines Realizam uma computação distinta Equações lineares, fatorização ortogonal e problemas de mínimos quadrados (fatorização QR, LQ, QR com pivotamento, fatorização ortogonal completa), etc. Auxiliary routines Rotinas usadas nas subtarefas e algoritimos de particionamento ScaLAPACK

16 ScaLAPACK PXYYZZZ Nomenclatura das rotinas
P: A primeira letra é para diferenciar das rotinas do LAPACK X: A segunda letra indica o tipo de dado S : Real D : Double C : Complex Z : Double Complex YY: As duas próximas indicam o tipo da matriz : Ex: SY – simétrica HE – hermitiana TR – triangular ZZZ: As três últimas indicam a computação Exemplos: PDTRSVX – rotina para resolver sistemas de equações lineares com matrizes triangulares PDSYEVX – rotina para calcular autovalores e autovetores de uma matriz simétrica double PSGEBRD – rotina que realiza uma redução bidiagonal de uma matriz geral single ScaLAPACK

17 Orientação ao Objeto

18 Orientação ao Objeto Conceitos
O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados. Todas as linguagens orientadas a objetos possuem três características básicas: Encapsulação Herança Polimorfismo Orientação ao Objeto

19 Orientação ao objeto Classes
É um tipo de dado, como os já conhecidos, para declarar variáveis Uma variável de uma classe é chamada de Objeto. Definir uma classe não cria um objeto, assim como um tipo de variável NÃO é uma variável Orientação ao objeto

20 Orientação ao Objeto Objetos
É uma entidade lógica que contém dados e código para manipular esses dados Class Carros { Cambio, acelerador, voltante, ... public: Acelerar ( ); Frear ( ); Trocar_marcha ( ); Virar_esquerda ( ); }; Class Carros BMW; Orientação ao Objeto

21 VEÍCULOS (SUPERCLASSE)‏
Herança É o processo em que um objeto pode adquirir as características de outro objeto Acelerar Frear Virar para esq. ... VEÍCULOS (SUPERCLASSE)‏ CLASSE CARROS CLASSE MOTOS Orientação ao Objeto

22 Orientação ao Objeto Matrizes e objetos
Matrizes podem ser representadas como uma abstração de problemas de álgebra linear Uma matriz específica seria um objeto da classe e as operações sobre elas os métodos da classe Orientação ao Objeto

23 Biblioteca desenvolvida

24 POOLALi Parallel Object Oriented Linear Algebra
Oferece rotinas para matrizes: Simétricas com simples precisão Simétricas com dupla precisão Hermitianas com simples precisão Hermitianas com dupla precisão POOLALi

25 POOLALi Características Métodos oferecidos
Acesso por índice global / local Cálculo de autovalores e/ou autovetores Atribuição e redistribuição de matrizes Adição de matrizes Subtração de matrizes Multiplicação de matrizes Facilidades oferecidas Interface amigável Encapsulação dos dados, ou seja, interface independente da implementação Simplificação de uso POOLALi

26 POOLALi Interface e métodos
template<typename elem_type, typename precision_type> class DistMat { public: DistMat ( const int M, const int N, const Grid &g, const int MB = 1, const int NB = 1 ); DistMat ( const DistMat<elem_type,precision_type> &A ); elem_type *local_matrix(); int rows(); int cols(); int block_rows(); int block_cols(); int local_rows(); int local_cols(); elem_type &operator()( const int I, const int J ); elem_type &local( const int i, const int j ); virtual void eigen( precision_type *eigenval) = 0; virtual void eigen( precision_type *eigenval, int il, int iu) = 0; ... virtual ~DistMat(); }; POOLALi

27 POOLALi Interface e métodos
class FloatSymmetric : public DistMat<float,float> { public: FloatSymmetric (const FloatSymmetric &A)‏ DistMat<float,float>(A); FloatSymmetric(const int M, const int N, Grid &g,const int MB = 1, const int NB = 1 ):DistMat<float,float>(M,N,g,MB,NB); FloatSymmetric &operator=( FloatSymmetric A ); friend FloatSymmetric operator+( FloatSymmetric A, FloatSymmetric B); friend FloatSymmetric operator-( FloatSymmetric A, friend FloatSymmetric operator*( FloatSymmetric A, void eigen( float *eigenval ); void eigen( float *eigenval, int il, int iu ); void eigen( float *eigenval, float vl, float vu ); void eigen( float *eigenval, DistMat<float,float> &eigenvec ); void eigen( float *eigenval, DistMat<float,float> &eigenvec, int il, int iu ); float vl, float vu ); ~FloatSymmetric(){}; } POOLALi

28 Análise de desempenho

29 Análise de desempenho Problema de física do estado sólido Algoritmo
Iniciar a grade de processadores Distribuir a matriz hamiltoniana Diagonalizar a matriz Liberar a grade de processadores Objetivo Comparar o código desenvolvido usando o ScaLAPACK e a biblioteca POOLALi Análise de desempenho

30 Análise de desempenho Inicialização da grade de processadores
Utilizando o ScaLAPACK int main(int argc, char *argv[])‏ { int rank, nprocs, zero = 0, context, less_one = -1; int nprow, npcol, myrow, mycol; char erre = 'R'; MPI_Init(&argc,&argv); blacs_pinfo__(&rank,&nprocs); blacs_get__(&less_one, &zero, &context); nprow = (int) sqrt(nprocs); while (( nprow!=1 ) && ((nprocs \ nprow) != 0))‏ nprow--; npcol = (int) (nprocs/nprow); blacs_gridinit__(&context, &erre, &nprow, &npcol); blacs_gridinfo__(&context, &nprow, &npcol, &myrow, &mycol); blacs_exit__(&zero); return 0; } Análise de desempenho

31 Análise de desempenho Inicialização da grade de processadores
Utilizando a POOLALi #include "grid.h" int main(int argc, char *argv[])‏ { Parallel p(argc, argv); Grid g(p); return 0; } Análise de desempenho

32 Análise de desempenho Distribuição da matriz Utilizando o ScaLAPACK
// ... definição dos valores associados à matriz ... // I, J -> Global // i,j -> local for( I = 0; I < N; I++)‏ { for( J = 0; J < N; J++)‏ .... value = Hamilton(I,J,n); l = (int)(floor( I/(nprow*mb) ) ); m = (int)(floor( J/(npcol*nb) ) ); x = I % mb; y = J % nb; i = l*mb + x; j = m*nb + y; if ( ( j*lrow + i ) < lrow*lcol )‏ ml[ j*lrow + i] = value; ... } Análise de desempenho

33 Análise de desempenho Distribuição da matriz Utilizando a POOLALi
#include "lib/grid.h" #include "lib/dsymmetric.h" ... DoubleSymmetric Matrix(N,N,g,8,8), for( int I = 0; I < N; I++)‏ { for( int J=0; J< N; J++)‏ Matrix(I,J) = Hamilton(I,J,n); } Análise de desempenho

34 Análise de desempenho Diagonalização da matriz Utilizando o ScaLAPACK
... // declaração das variáveis de entrada na função static int lwork = -1, liwork = -1; double *work, tmpwork; int *iwork, tmpiwork; ifail = new int[n]; iclustr = new int[2*nprow*npcol]; gap = new double[nprow*npcol]; pdsyevx_(&jobz, &range, &uplo, &n, ml, &ia, &ja, desca, &vl, &vu, &il, &iu, &abstol,&n_aut, &n_vec, eigenval, &orfac, z, &iz, &jz, descz, &tmpwork, &lwork, &tmpiwork, &liwork, ifail, iclustr, gap, &info); lwork = int(2*tmpwork); liwork =tmpiwork; work = new double[lwork]; iwork = new int[liwork]; &vu, &il, &iu, &abstol,&n_aut, &n_vec, eigenval,&orfac,z, &iz, &jz, descz, work, &lwork, iwork, &liwork, ifail, iclustr, gap, &info); ... Análise de desempenho

35 Análise de desempenho Diagonalização da matriz Utilizando a POOLALi
#include "lib/grid.h" #include "lib/dsymmetric.h" ... DoubleSymmetric Matrix(N,N,g,8,8), Vec(N,N,g,8,8); double *eigenval; eigenval = new (double)[N]; Matrix.eigen(eigenval, Vec); Análise de desempenho

36 Comparação de desempenho
Análise de desempenho

37 Comparação de desempenho
Análise de desempenho

38 Comparação de desempenho
Análise de desempenho

39 Conclusão

40 Conclusões Conclusões A utilização de orientação ao objeto ofereceu:
Alto nível de abstração Interface amigável Nomenclatura dos métodos é mais intuitiva que as rotinas do ScaLAPACK Não ofereceu perda de desempenho em relação ao ScaLAPACK Conclusões

41 Conclusões Trabalhos futuros
Extensão da POOLALi para todos os métodos oferecidos pelo ScaLAPACK Sistemas Lineares, problemas de mínimos quadrados, fatorização LU, inversão matricial, etc Criação de classes para outros tipos de matrizes De banda, tridiagonais, ortogonais, triangulares, unitárias, esparsas Implementação de métodos não oferecidos pelo ScaLAPACK Equações diferenciais, estatística, visão, etc. Conclusões


Carregar ppt "Técnicas de orientação ao objeto para computação científica paralela"

Apresentações semelhantes


Anúncios Google