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

Slides:



Advertisements
Apresentações semelhantes
Introdução a Programação Orientada a Objetos
Advertisements

Estratégias Pipelined
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Denise Guliato Faculdade de Computação – UFU
Paulo Marques Hernâni Pedroso
Construção de Algoritmos AULA 07
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
MPI – Comunicações Com. Colectiva esquecida Barrier não há troca de dados, apenas sincroniza os processos int MPI_Barrier( MPI_Comm, comm) T com = T lat.
MPI - Introdução Message-Passing Model Task: código + memória (uma ou várias tasks no mesmo processador) Mensagem: as tasks comunicação entre si trocando.
Programação para Engenharia I
Java: Pacotes e Modificadores de Visibilidade
Orientação a Objetos Introdução. Objetos: o que são? Olhando o mundo real pode-se ver vários objetos: mesa, cadeiras, alunos, professores etc. Esses objetos.
Por Fernando B., João Victor, Rafael F. e Yulle..
Padrão MPI – Message Passing Interface
Message Passing Interface (MPI)
Templates Traduzido de:
Sobrecarga de Operadores
INTRODUÇÃO À PROGRAMAÇÃO
Rganização de Computadores Multiprocessadores Capítulo 9 – Patterson & Hennessy Organização de Computadores Multiprocessadores Capítulo 9 – Patterson &
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
Introdução Linguagem C
YACC.
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Protocolo CMB em simulação distribuída
JAVA: Conceitos Iniciais
Programação Orientada a Objetos em Delphi
Introdução a Computação e Cálculo Numérico
Tipos Agregados Homogêneos e Listas
Linguagens de Programação
Conceitos básicos de orientação a objetos
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 27 (1) Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas.
INTELIGÊNCIA ARTIFICIAL
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Análise e Projeto de Sistemas UNIVERSIDADE DE CRUZ ALTA Ciência da Computação 2010/1.
Web Services Uninorte Semana de Tecnologia da Informação
Métodos de Construção de Software: Orientação a Objetos
Professor Mário Dantas
Tipos de Dados Paradigmas de Programação
Tipos Abstratos de Dados
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Algoritmos - Propriedades Desejáveis (1)
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 26 (1) Troca de Mensagens Troca de Mensagens Tópicos: Características de Mensagens Implementação.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Matemática para Economia III
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
SISTEMAS DISTRIBUIDOS Aula 4
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Introdução à Linguagem C
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
MPI - Message Passing Interface Mestrado em Matemática Computacional 2003.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Recursividade Profs. De Prog2 e Lab2.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Cálculo Numérico Módulo I Ferramentas de Suporte
Introdução a Orientação a Objetos
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Jorge Zavaleta PVM vs MPI. Introdução Objetivos do MPI Implementações e definições processos dinâmicos Contextos Operações não bloqueantes Portabilidade,heterogeneidade.
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Linguagem Java Programação II.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

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

Introdução

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

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

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

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

Bibliotecas Paralelas

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

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

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

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

Grade de processadores ScaLAPACK

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

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

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

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

Orientação ao Objeto

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

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

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

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

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

Biblioteca desenvolvida

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

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

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

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

Análise de desempenho

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

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

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

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

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

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

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

Comparação de desempenho Análise de desempenho

Comparação de desempenho Análise de desempenho

Comparação de desempenho Análise de desempenho

Conclusão

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

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