Ambiente para Suporte ao Desenvolvimento de Aplicações Paralelas Baseadas no Modelo #.
Rodrigo Cavalcante Mendes1
1Centro de Informática – Universidade Federal do Pernambuco (UFPE)
rcm2@cin.ufpe.br
Abstract. This paper purpose is describe some artifacts features and techniques applied on conception and implementation of a CASE (Computer Aided Software Development) tool based on # model, an extension of Haskell model concepted by Dr. Francisco Heron de Carvalho Júnior. The tool provides a visual development support for wide scale clusters parallel programs, using abstractions supported by # programming model, contribuiting on reuse of software components, on both orthogonal programming levels supported by # model, coordination and computation.
Resumo. Este artigo tem como objetivo descrever algumas características de artefatos e técnicas aplicadas na concepção e implementação de uma ferramenta de suporte ao desenvolvimento de aplicações sob o modelo #, extensão do modelo Haskell concebida pelo Dr. Francisco Heron de Carvalho Júnior. Esta ferramenta propõe-se a fornecer o suporte ao desenvolvimento visual de programas paralelos de larga escala sobre clusters, através das abstrações oferecidas pelo modelo # de programação, permitindo o reuso de componentes de software, sob ambos os níveis ortogonais de programação suportados pelo modelo #, coordenação e computação.
1. Introdução
O objetivo desta seção é descrever e definir algumas das motivações e fundamentos os quais o a ferramenta Visual # Tool se baseia, abordando o propósito do modelo # bem como suas características principais e a linguagem Haskell #, base da geração de código para execução de aplicações paralelas utilizando a linguagem funcional Haskell.
1.1. O Modelo Hash (#)
O modelo # foi elaborado como uma iniciativa de ser uma opção para o desenvolvimento de aplicações e soluções que requerem recursos de paralelismo.
Através de uma observação das tendências encontradas com a disseminação de tecnologias que se utilizam de paralelismo, grid computing e cluster computing, o modelo # oferece o recurso de programação em alto nível, agregando as novas metodologias e abordagens utilizadas no desenvolvimento de aplicações em larga escala. Tendo sido fundamentada em modelos formais de redes de Petri, ela possibilita analisar propriedades e avaliar o desempenho das aplicações através do uso de ferramentas já existentes. Aspectos de qualidade e produtividade provenientes da engenharia de software como modularidade e reuso estão entre alguns dos fundamentos em que o modelo propõe adotar.
Uma aplicação baseada no modelo # pode ser analisada através de duas perspectivas fundamentais: o mundo das computações e o mundo dos processos. O primeiro refere- se às funcionalidades oferecidas pela aplicação, descrevendo-as sob a ótica computacional. O segundo analisa sob o âmbito organizacional do paralelismo empregado, de forma a otimizar o desempenho. Mecanismos de alto nível visando possibilitar a geração de um código eficiente, considerando uma linguagem de alto nível foram aplicados. Entre eles os de mais destaque são os esqueletos topológicos. O mundo dos processos é responsável por capturar a essência do comportamento conjunto dos processos que formam o programa paralelo especificado por uma biblioteca de passagem de mensagens. O uso da linguagem haskell para servir de base para implementação de códigos para aplicações paralelas deve-se essencialmente pela possibilidade de ortogonalizar o mundo de processos com o mundo computacional, sem a necessidade de nenhuma extensão, pois oferece recursos como funções de alta ordem e lazy evaluation [Carvalho 2004].
1.1. A Linguagem Haskell #
A linguagem Haskell # é uma extensão da linguagem Haskell, baseada no modelo # para a execução paralela de programas funcionais que se baseiam em arquiteturas distribuídas, chamadas de clusters. Uma das principais vantagens provenientes da independência entre os meios de coordenação e computação no modelo # é a facilidade de implementação em linguagens que têm uma fácil aderência ao modelo, podendo-se usufruir de ferramentas já existentes sem necessidade de adaptações.
MPI (Message Passing Library) e GHC (Glasgow Haskell Compiler), são bases para a linguagem no aspecto de gerenciamento de paralismo e para a compilação de módulos funcionais respectivamente, colaborando para a eficiência e portalidade em aplicações desenvolvidas a partir da linguagem [Carvalho 2004].
2. A ferramenta VHT (Visual # Tool)
A ferramenta VHT (Visual # Tool) foi concebida com o propósito de fornecer suporte a implementação de aplicações baseadas no modelo #, disponibilizando um ambiente
visual de desenvolvimento de aplicações paralelas baseadas nesse modelo, facilita a visualização e criação de configurações, além de permitir o reuso de componentes e configurações previamente implementadas. A possibilidade de utilização e criação de bibliotecas de componentes do modelo # e integração com aplicações já existentes visando avaliação de propriedades e análise de desempenho das aplicações de grid computing ou cluster computing e geração de código na linguagem haskell # são alguns dos propósitos da ferramenta.
2.1. Características principais
A ferramenta VHT fornece suporte as seguintes características:
Suporte a uma biblioteca de componentes reusáveis;
Geração de código # a partir da especificação visual da configuração;
Integração ao compilador #, para geração de código MPI executável;
Integração a LAM-MPI, permitindo a execução de aplicações paralelas no cluster a partir do ambiente de desenvolvimento;
Integração a XMPI, para visualização da execução de programas MPI;
Integração ao tradutor de programas para redes de Petri;
Integração à ferramenta PEP[BEEJGB+97], para a avaliação de propriedades de programas com # com redes de Petri.
A ferramenta CASE (Computer Aided Software Engineering), foi dividida em vários módulos, ficando o enfoque deste artigo as considerações relativas ao suporte de bibliotecas reusáveis e a geração do código # a partir da especificação visual da configuração.
2.2. Linguagem de Programação Adotada
A linguagem de programação adotada foi JAVA, por fornecer suporte à programação orientada a objetos e ser multiplataforma, permitindo uma maior integração com outras aplicações. A priorização desses critérios deve-se principalmente aos requisitos de reuso e de integração com aplicações baseadas em plataformas distintas, essencialmente as de execução e simulação de ambientes paralelos.
Em especial foi utilizada a biblioteca swing, que fornece suporte a componentes visuais para o desenvolvimento de interfaces e ser uma biblioteca independente de plataforma, diferentemente da SWT.
2.3. Estrutura de Dados Adotada para Integração
A estrutura adotada foi XML por ser simples e flexível, permitindo criar uma gramática baseada no modelo #, podendo ser extensível para novas funcionalidades e fornecer uma fácil integração com outras aplicações por ter um padrão universalizado.
3. A Arquitetura
O ambiente foi desenvolvido utilizando uma arquitetura modular em 3 camadas utilizando a estrutura da Figura 1.
3.1. Camada de Apresentação
A camada de apresentação é responsável por disponibilizar e interagir com o usuário as funcionalidades da aplicação. Para a primeira versão da aplicação foi selecionado o modelo desktop de aplicação, onde o software é instalado na máquina do usuário e utilizasse de recursos do sistema operacional para gerenciamento e navegação entre as janelas da ferramenta. Este padrão de interface adotado foi baseado nas ferramentas mais conceituadas e utilizadas como o BORLAND JBUILDER, BORLAND DELHI, entre outros.
3.2. Camada de Negócio
A camada de negócio é responsável por fornecer as funcionalidades do sistema e representar as entidades e componentes utilizados pela aplicação. Como a linguagem utilizada adotada é orientada a objetos, os componentes gráficos (representações visuais de conceitos do modelo #) e os componentes de negócio (representação em objeto e entidades dos conceitos do modelo #) são construídos, manipulados e integrados nessa camada, diminuindo o acoplamento entre a interface e os componentes de negócio e entre componentes de negócio e a persistência dos dados.
3.3. Camada de Persistência
A camada de persistência é responsável por recuperar e armazenar as configurações especificadas na ferramenta. Como estrutura de persistência foi utilizada o sistema de arquivos, em que as entidades, componentes e objetos que representam o modelo # são mapeados em estruturas em XML, facilitando a integração entre aplicações que suportam o modelo # e o reuso de configurações no próprio VHT.
Apresentação Negócio Persistência
Figura 1. Visão geral Arquitetura
4. Conceitos Gerais aplicados ao VHT
Esta seção define algumas das principais suportadas pelo modelo # e que são utilizadas na maioria das funcionalidades e representações do VHT.
4.1. Componentes
Componentes são abstrações para as entidades do modelo # que implementam funções, que quando compostas descrevem as computações realizadas pelo programa paralelo.
Preferencialmente, cada componente implementa uma certa funcionalidade específica, sendo descrito unicamente pela sua interface, composta por argumentos e pontos de retorno [Carvalho 2004].
4.2. Unidades (Units)
No modelo #, unidades constituem abstrações para entidades executáveis (processos) em programas paralelos, instanciadas a partir de interfaces. Unidades instanciadas a partir de uma mesma interface compartilham o mesmo conjunto de portas e comportamento especificados por esta.
Na descrição de uma unidade, é possível replicar as portas de sua interface, formando agrupamentos de portas. No entanto, tendo em vista manter a consistência com a descrição comportamental descrita pela interface a partir da qual a unidade foi instanciada, agrupamentos de portas são tratados como portas individuais quando ativadas. Portanto, portas pertencentes a um mesmo agrupamento devem ser ativadas simultaneamente na ativação deste [Carvalho 2004]. Uma unidade básica pode ser visualizada na Figura 2.
Figura 2. Unit Básica
4.3. Configurações (Configurations)
Uma configuração é um programa que define um componente composto. Uma configuração no modelo # é formada por declarações de entidades (componentes, interfaces, unidades e canais) e as relações entre estas, constituindo uma rede de unidades [Carvalho 2004].
4.4. Interfaces
O conceito de interface no modelo # representa as informações essenciais para caracterização, em nível de coordenação, do comportamento dos processos que compõem um programa paralelo. Uma interface # é definida por uma coleção de portas de entrada e saída. A ordem em que estas são ativadas durante a execução descreve o comportamento da interface. Define-se a ativação de uma porta é ocorre quando uma operação de comunicação é realizada [Carvalho 2004].
5. O Ambiente Visual VHT e Principais Componentes
A ferramenta VHT foi dividida em módulos distintos, mas podendo-se agrupar em essencialmente dois: o módulo de confecção do ambiente, representação em XML e criação de especificações de configurações e o modulo de aplicações de integração.
A seguir segue algumas considerações a respeito das funcionalidades do módulo de confecção do ambiente gráfico e geração de código XML. Na Figura 3 podemos visualizar a tela principal do ambiente VHT bem como o menu de atalho de suas principais funcionalidades. O menu de atalho possui as principais funcionalidades do sistema e é exibido através do clique do mouse.
Figura 3. Tela Principal e Menu de Atalho.
A ferramenta VHT possui diversas funcionalidades implementadas, em que a maioria delas está relacionada a unidades (units). Algumas funcionalidades de uma unidade são:
Atribuir um componente: Associa uma unidade a um componente (Figura 4).
Figura 4. Unidade com um componente associado.
Configurar uma Interface: Aplica uma interface à unidade, permitindo a configuração realização de comunicação através das portas de entrada e saída (Figura 5).
Figura 5. Unidade com uma interface configurada.
Através dessas funcionalidades é possível configurar completamente uma unidade e com isso fazer diversas interações e relações entre outras, gerando assim componentes compostos que posteriormente podem formar componentes para servirem como biblioteca, gerar código executável baseado na linguagem Haskell #, simular a execução da aplicação paralela, ou executar aplicações integradas a ferramenta, para avaliação de desempenho e análise de propriedades. Um exemplo de interações e relações é exibido na Figura 6.
Figura 6. Exemplo de relacionamentos e configurações de componentes.
5.1. Representação de entidades no modelo # em dados semi-estruturados (XML)
Um dos recursos mais interessantes da ferramenta é a forma de armazenamento das aplicações paralelas geradas no ambiente visual. A estrutura de armazenamento adotada é baseada na linguagem XML, permitindo uma melhor representatividade dos dados e permitindo a integração com outras aplicações e módulos do sistema.
Foi criada uma estrutura que identifica as entidades do modelo # suportadas na ferramenta VHT. Na Figura 7 podemos visualizar uma unidade com a interface configurada e seu código em XML correspondente.
Figura 7. Unidade com a interface configurada e o código XML correspondente.
6. Considerações Finais
O modelo # surgiu com a proposta de simplificar o desenvolvimento de aplicações paralelas distribuídas, fornecendo um conjunto de recursos de suporte à programação de alto-nível considerando critérios de boas práticas amplamente difundidas como reuso e portabilidade.
A ferramenta Visual # Tool tem como objetivo facilitar a geração de código de aplicações paralelas suportadas pelo modelo #, além de agregar a possibilidade de uma programação baseada em componentes visuais e permitir o uso integrado de ferramentas existentes que objetivam avaliar propriedades, desempenho e simulação dos ambientes e aplicações paralelas.
7. Trabalhos Futuros
Pela ferramenta Visual # Tool se propor a integrar várias aplicações já disseminadas para a análise de propriedade, simulação e avaliação de desempenho de aplicações paralelas, é necessário realizar a integração do módulo de ambiente visual e geração de código com o que se comunica com aplicações externas.
A representação em XML necessita de um maior refinamento e adição de novas funcionalidades, essencialmente relacionadas a entidades e recursos existentes no modelo #, mas ainda não suportados na ferramenta.
Alguns recursos avançados disponíveis no modelo # precisam ser implementados no ambiente de desenvolvimento visual, permitindo a total aderência entre o modelo e a ferramenta.
8. Referências
Carvalho, Francisco Heron. (2004) “Programação Paralela Eficiente de Alto-Nível Sobre Arquiteturas Distribuidas”, Tese de Doutorado defendida no Centro de Informática – Universidade Federal de Pernambuco.
Ian Sommerville. Software Engineering - sixth edition. Addison-Wesley, 2000.
W3C - World Wide Web Consortium, Extensible Markup Language (XML), http://www.w3.org/XML/, Janeiro 2004.