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

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

Instituto de Física de São Carlos - IFSC Universidade de São Paulo - USP Francisco Aparecido Rodrigues Orientador: Gonzalo Travieso Técnicas de orientação.

Apresentações semelhantes


Apresentação em tema: "Instituto de Física de São Carlos - IFSC Universidade de São Paulo - USP Francisco Aparecido Rodrigues Orientador: Gonzalo Travieso Técnicas de orientação."— Transcrição da apresentação:

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

2 Introdução

3 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 INTRODUÇÃO

4 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) Computação paralela INTRODUÇÃO

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

6 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 Desenvolvimento de softwares paralelos INTRODUÇÃO

7 Bibliotecas Paralelas

8 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: 1. Processos 2. Comunicadores 3. Mensagens 4. 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 – Message Passing Interface MPI

9 Bibliotecas numéricas 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.

10 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 Características ScaLAPACK

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

12 Grade de processadores ScaLAPACK

13 Exemplo Distribuição em blocos 1 x 1 Exemplo: N = 16 e P = 4 Grade: 2 X 2 Distribuição da Matriz ScaLAPACK P0P1 P2P3 MATRIZ GRADE A11A12A13 A14 A21A22A23A24 A31A32A33A34 A41A42A43A44 A11A13A12 A14 A31A33A32A34 A21A23A22A24 A41A43A42A44

14 Utilização ScaLAPACK 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(... )

15 Divididas em três grupos 1. Driver Routines Resolvem um problema completamente. Equações lineares, problemas de mínimos quadrados, problemas de autovalores, etc. 2. 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. 3. Auxiliary routines Rotinas usadas nas subtarefas e algoritimos de particionamento Rotinas ScaLAPACK

16 PXYYZZZ 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 Nomenclatura das rotinas ScaLAPACK

17 Orientação ao Objeto

18 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: 1. Encapsulação 2. Herança 3. Polimorfismo Conceitos Orientação ao Objeto

19 É 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 Classes Orientação ao objeto

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

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

22 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 Matrizes e objetos Orientação ao Objeto

23 Biblioteca desenvolvida

24 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 Parallel Object Oriented Linear Algebra POOLALi

25 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 Características POOLALi

26 Interface e métodos POOLALi template class DistMat { public: DistMat ( const int M, const int N, const Grid &g, const int MB = 1, const int NB = 1 ); DistMat ( const DistMat &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(); };

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

28 Análise de desempenho

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

30 Utilizando o ScaLAPACK Inicialização da grade de processadores Análise de desempenho 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; }

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

32 Distribuição da matriz Análise de desempenho 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;... }

33 #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);... } Distribuição da matriz Análise de desempenho Utilizando a POOLALi

34 ... // 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]; pdsyevx_(&jobz, &range, &uplo, &n, ml, &ia, &ja, desca, &vl, &vu, &il, &iu, &abstol,&n_aut, &n_vec, eigenval,&orfac,z, &iz, &jz, descz, work, &lwork, iwork, &liwork, ifail, iclustr, gap, &info);... Diagonalização da matriz Análise de desempenho Utilizando o ScaLAPACK

35 Diagonalização da matriz Análise de desempenho 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);...

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 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 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. Trabalhos futuros Conclusões


Carregar ppt "Instituto de Física de São Carlos - IFSC Universidade de São Paulo - USP Francisco Aparecido Rodrigues Orientador: Gonzalo Travieso Técnicas de orientação."

Apresentações semelhantes


Anúncios Google