• No results found

No Capítulo 2 discutimos os mecanismos capazes de suportar a realização de reconfigurações em sistemas de software. Buscamos trazer a tona os artifícios já utilizados para tal fim, além da apresentar suas vantagens e desvantagens.

Entretanto, parte das discussões foram limitadas a apontamentos teóricos, pela ausência de informações detalhadas do funcionamento das aplicações apresentadas pelas publicações.

Com um pouco mais de ousadia, futuras discussões sobre o assunto podem desenvolver pequenas provas de conceito para fazer juízo de valor a partir de experimentos práticos.

6.1. Confrontação dos Resultados perante os Objetivos 122

6.1.3 Identificar e descrever os principais modos de reconfiguração estática e dinâmica de componentes paralelos na plataforma HPE Definimos com precisão os tipos de reconfiguração dinâmica suportados pelo HPE, trabalho realizado sob o amparo de uma metodologia de classificação já existente, porém adaptada às particularidades do modelo Hash.

Como resultado, formalizamos três tipos de reconfiguração:

◮ A reconfiguração comportamental, que pode ser aplicada sobre componentes de configuração a fim de alterar o comportamento de uma ação ou condicional de uma unidade de um componente;

◮ A reconfiguração estrutural explícita, atuante também sobre os componentes de configuração, porém com a finalidade de lhes adicionar novos componentes aninhados, de modo a gerar a inserção de novas fatias às suas unidades. Imaginamos que seu uso com frequência ocorra associado à reconfiguração anterior; e

◮ A reconfiguração estrutural implícita, que pode ser aplicada sobre componentes de configuração, porém podendo repercutir em qualquer dos tipos de componentes transitivamente aninhados. Essa reconfiguração atualmente é realizada mediante a alteração de parâmetros de contexto do sistema de tipos HTS, suportado pelo HPE, resultando na readequação dos componentes ao novo contexto apresentado.

Quanto a reconfiguração estática, defendemos o uso da herança funcional a qual pode se associar com qualquer uma das reconfigurações acima definidas, dando, desta forma, o mesmo tratamento e expressividade das dinâmicas.

6.1.4 Disponibilizar uma infraestrutura de execução de aplicações baseadas em conectores exógenos, desenvolvidas com a ADL proposta

Já citamos há pouco, na seção que descreve o objetivo geral, os resultados satisfatórios obtidos com o ambiente de interpretação e reconfiguração, para os quais entendemos que já haja suficiente exposição. Nesta seção, acreditamos ser de maior relevância relatar as suas limitações.

O protótipo desenvolvido deve ser encarado como tal, tendo em vista a baixa maturidade da atual implementação para dar suporte a execução em ambientes críticos em produção.

Os experimentos de interpretação apontam a necessidade de maior rigor na gestão de memória, tendo em vista o crescimento de seu consumo a cada nova iteração. Além de revisar os pontos de criação de objetos, melhorias também podem ser alcançadas a partir de configurações e usos explícitos de funções do garbage collector; Também é necessário revisar a arquitetura de software empregada pelo protótipo, buscando explorar métodos mais eficientes de implementação. Essa tarefa inclusive pode ser guiada pela identificação de possíveis gargalos durante a execução da aplicação BT, tendo em vista a exorbitante discrepância dos resultados obtidos entre os cenários BT.W.9 e BT.S.9, a partir dos quais podemos supor a existência de possíveis otimizações em função do forte contraste frente aos outros experimentos realizados com a aplicação SP.

6.2 Contribuições

Em qualquer nível de desenvolvimento, motivado pela economia de tempo e custo, o reuso de software é desejável. Naturalmente, os benefícios são mais acentuados quando se trata de componentes de grossa granularidade, capazes de entregar grandes funcionalidades e significativas porções de código-fonte. Quando modelados de forma devida, esses componentes se tornam adequados para a programação de grande escala na forma de aplicações escritas como conectores exógenos.

Programar nesta escala traz o benefício da simplicidade ao manipular grandes componentes que representam entidades e aspectos do domínio do problema. Porém, este benefício só é alcançado quando a linguagem de programação segue os mesmos preceitos, disponibilizando operadores e construções coerentes com o tipo de programação demandada. Linguagens de propósito geral, conhecidas pela versatilidade e grande expressividade, passam a ter nestas mesmas característica os principais empecilhos para o seu uso na configuração de macro componentes. A versatilidade e expressividade destas linguagens estão apoiadas na baixa granularidade de suas instruções. Indubitavelmente, é possível realizar todas as operações de coordenação e configuração a partir de uma dessas linguagens, tendo porém que utilizar um conjunto de chamadas. Porém, na medida em que operações conceitualmente atômicas para o modelo tem de ser desenvolvidas mediante várias instruções, este excesso induz ao erro, dificulta o desenvolvimento, como também a legibilidade das aplicações.

6.3. Trabalhos Futuros 124

HCL especificar o comportamento das ações, contribui para a simplificação do desenvolvimento de grandes aplicações construídas por composição. Com isso, além dos benefícios associados ao reuso, passamos a permitir de forma prática no âmbito do HPE, a possibilidade de existência de dois perfis de programadores, onde o primeiro, com perfil mais técnico, atua no desenvolvimento em pequena escala, na confecção dos componentes nativos, enquanto que o segundo, detentor de maior conhecimento da área fim, faz uso desses componentes de forma simplificada através da construção de conectores descritos em HCL. Essa divisão de papéis favorece a popularização da programação paralela e distribuída, normalmente associada a complexidade de seu uso.

Com a reconfiguração dinâmica, suprimos uma importante lacuna na plataforma HPE. O amadurecimento das funcionalidades defendidas pela plataforma, a credencia a tornar-se uma alternativa na execução de aplicações concorrentes, permitindo a disseminação do uso de componentes intrinsecamente paralelos, principal diferencial da plataforma. O uso conjunto da nova ADL com a reconfiguração dinâmica oferece as ferramentas necessárias para a prototipação e o desenvolvimento experimental, de forma a criar mais um meio que contribua para cientistas e pesquisadores desfrutarem de máquinas de alto desempenho, pois apesar de serem especialistas nas suas áreas fins, possuem baixas habilidades de programação concorrente e distribuída.

Este trabalho contribui ainda como insumo para a definição e implementação de reconfiguração dinâmica no contexto de outras plataformas de componentes. A forma modular do arcabouço permite a sua inserção em outras plataformas mediante a necessidade de pouca alteração, desde que esta seja aderente ao modelo Hash.

6.3 Trabalhos Futuros

Ao longo da realização desta dissertação, trabalhos de extensão ou de aprofundamento se mostraram relevantes dentro do contexto estudado, os quais citamos abaixo como sugestão para trabalhos futuros:

◮ Desenvolvimento de um compilador source-to-source que permita a tradução da linguagem HCL para a linguagem intermediária do arcabouço de execução, ambas especificadas por este trabalho;

◮ Realização de testes de estresse, mediante a utilização de componentes interpretados em vários níveis de hierarquização de forma a identificar os níveis

de composição máximos até o surgimento de sobrecargas proibitivas;

◮ Criação de um mecanismo de transferência de estado, de forma permitir que componentes de estruturas de dados e outros que mantenham informações de execução possam participar dos processos de reconfiguração;

◮ Demonstração de prova formal de corretude do mecanismo de reconfiguração dinâmica proposto, alinhado com métodos mais eficazes de detecção e prevenção de deadlocks.

Referências Bibliográficas

[1] The common component architecture forum. Disponível em: <http://http://www.cca-forum.org>, 2012.

[2] The ruby programming language. Disponível em:

<http://www.ruby-lang.org>, 2012.

[3] Allan, B. A., and Armstrong, R. Ccaffeine framework: Composing and debugging applications interactively and running them statically. Tech. rep., Compframe 2005, June 2005.

[4] Allan, B. A., Armstrong, R. C., Wolfe, A. P., Ray, J., Bernholdt, D. E., and Kohl, J. A. The cca core specification in a distributed memory spmd framework. Concurrency and Computation: Practice & Experience 14, 5 (2002), 323–345.

[5] Araújo, G. A., Carvalho, Jr, F. H., and Corrêa, R. C. Implementing endogenous and exogenous connectors with the common component architecture. In Proceedings of the 2009 Workshop on Component-Based High Performance Computing (New York, NY, USA, 2009), CBHPC ’09, ACM, pp. 12:1–12:4.

[6] Armstrong, R., Gannon, D., Geist, A., Keahey, K., Kohn, S., McInnes, L., Parker, S., and Smolinski, B.Toward a common component architecture for high-performance scientific computing. In Proceedings of the 8th IEEE International Symposium on High Performance Distributed Computing (Washington, DC, USA, 1999), HPDC ’99, IEEE Computer Society, pp. 115–124.

[7] Armstrong, R., Kumfert, G., McInnes, L. C., Parker, S., Allan, B., Sottile, M., Epperly, T., and Dahlgren, T. The cca component model

for high-performance scientific computing. Concurrency and Computation: Practice & Experience 18, 2 (February 2006), 215–229.

[8] Bailey, D., Barszcz, E., Barton, J., Browning, D., Carter, R., Dagum, L., Fatoohi, R., Fineberg, S., Frederickson, P., Lasinski, T., Schreiber, R., Simon, H., V., V., and Weeratunga, S. The nas parallel benchmarks. Tech. Rep. RNR-91-02, NASA Ames Research Center, Moffett Field, CA, 1991.

[9] Bailey, D. H., Barszcz, E., Barton, J. T., Browning, D. S., Carter, R. L., Dagum, L., Fatoohi, R. A., Frederickson, P. O., Lasinski, T. A., Schreiber, R. S., Simon, H. D., Venkatakrishnan, V., and Weeratunga, S. K.The nas parallel benchmarks - summary and preliminary results. In Proceedings of the 1991 ACM/IEEE conference on Supercomputing (New York, NY, USA, 1991), Supercomputing ’91, ACM, pp. 158–165.

[10] Batista, T., Gomes, A. T., Coulson, G., Chavez, C., and Garcia, A. On the interplay of aspects and dynamic reconfiguration in a specification-to-deployment environment. In Proceedings of the 2nd European conference on Software Architecture (Berlin, Heidelberg, 2008), ECSA ’08, Springer-Verlag, pp. 314–317.

[11] Batista, T., and Rodriguez, N. Dynamic reconfiguration of component-based applications. In Proceedings of the International Symposium on Software Engineering for Parallel and Distributed Systems (Washington, DC, USA, 2000), IEEE Computer Society, pp. 32–.

[12] Baude, F., Caromel, D., Dalmasso, C., Danelutto, M., Getov, V., Henrio, L., and Pérez, C. Gcm: a grid extension to fractal for autonomous distributed components. Annals of Telecommunications 64, 1 (2009), 5–24. [13] Bertrand, F., and Bramley, R. Dca: a distributed cca framework based

on mpi. In Proceedings of the 9th International Workshop on High-Level Parallel Programming Models and Supportive Environments. (Los Alamitos, CA, USA, April 2004), IEEE Computer Society, pp. 80 – 89.

[14] Bruneton, E., Coupaye, T., Leclercq, M., Quéma, V., and Stefani, J.-B. The fractal component model and its support in java: Experiences with

Referências Bibliográficas 128

auto-adaptive and reconfigurable systems. Software Practice & Experience 36, 11-12 (September 2006), 1257–1284.

[15] Bruneton, E., Coupaye, T., and Stefani, J. The Fractal Component Model, Fevereiro 2004. Versão 2.0-3.

[16] Buckley, J., Mens, T., Zenger, M., Rashid, A., and Kniesel, G. Towards a taxonomy of software change: Research articles. Journal of Software Maintenance and Evolution: Research and Practice 17, 5 (September 2005), 309–332.

[17] Carvalho Junior, F. H., and Correa, R. C. The Design of a CCA Framework with Distribution, Parallelism, and Recursive Composition. In Proceedings of the 11th IEEE/ACM International Conference on Grid Computing (GRID’2010) - 2010 Workshop on Component-Based High Performance Computing (CBHPC’10) (Brussels, Belgium, 2010), pp. 339–348. [18] Carvalho Junior, F. H., Correa, R. C., Lins, R., Silva, J. C., and Araújo, G. A. High Level Service Connectors for Components-Based High Performance Computing. In Proceedings of the 19th International Symposium on Computer Architecture and High Performance Computing (Gramado, RS, Brazil, October 2007), SBAC-PAD 2007, pp. 237–244.

[19] Carvalho-Junior, F. H., and Lins, R. D. An institutional theory for #-components. Electronic Notes in Theoretical Computer Science (ENTCS) 195 (January 2008), 113–132.

[20] Carvalho Junior, F. H., Lins, R. D., Corrêa, R. C., and Araújo, G. A. Towards an architecture for component-oriented parallel programming. Concurrency and Computation: Practice & Experience 19, 5 (April 2007), 697–719.

[21] Crnkovic, I., Sentilles, S., Vulgarakis, A., and Chaudron, M. A classification framework for software component models. IEEE Transactions on Software Engineering 37, 5 (September-October 2011), 593 –615.

[22] Danelutto, M., Fragopoulou, P., Getov, V., Malawski, M., Gubaula, T., Kasztelnik, M., Bartynski, T., Bubak, M., Baude, F., and Henrio, L. High-level scripting approach for building component-based

applications on the grid. In Making Grids Work. Springer US, 2008, pp. 309–321.

[23] de Araújo, G. A. Uma Plataforma para Aplicações Científicas de Alto Desempenho Usando Conectores. PhD thesis, Universidade Federal do Ceará, 2010.

[24] de Carvalho Junior, F. H., and Lins, R. D. Haskell#: Parallel programming made simple and efficient. Journal of Universal Computer Science 9, 8 (aug 2003), 776–794.

[25] de Rezende, C. A. Avaliação de desempenho de uma plataforma de componentes paralelos. Master’s thesis, Universidade Federal do Ceará, 2011. [26] Dongarra, J., Graybill, R., Harrod, W., Lucas, R., Lusk, E.,

Luszczek, P., Mcmahon, J., Snavely, A., Vetter, J., Yelick, K., Alam, S., Campbell, R., Carrington, L., Chen, T.-Y., Khalili, O., Meredith, J., and Tikir, M. Darpa’s hpcs program: History, models, tools, languages. In Advances in COMPUTERS High Performance Computing, M. V. Zelkowitz, Ed., vol. 72 of Advances in Computers. Elsevier, 2008, pp. 1 – 100. [27] Englander, R. Developing Java beans. O’Reilly & Associates, Inc.,

Sebastopol, CA, USA, 1997.

[28] Frumkin, M., Schultz, M., Jin, H., and Yan, J. Implementation of the nas parallel benchmarks in java. Tech. Rep. NAS-02-009, NASA Ames Research Center, Moffett Field, CA, 2002.

[29] Heineman, G. T., and Councill, W. T., Eds. Component-based software engineering: putting the pieces together. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2001.

[30] Hoare, C. A. R. Communicating sequential processes. Prentice-Hall, Inc., Upper Saddle River, NJ, USA, 1985.

[31] Hovland, P., Keahey, K., McInnes, L. C., Norris, B., Diachin, L. F., and Raghavan, P. A quality of service approach for high-performance numerical components. In Proceedings of the Workshop on QoS in Component-Based Software Engineering, Software Technologies Conference (Toulouse, France, June 2003).

Referências Bibliográficas 130

[32] Kang, P., Selvarasu, N. K., Ramakrishnan, N., Ribbens, C. J., Tafti, D. K., and Varadarajan, S. Modular, fine-grained adaptation of parallel programs. In Proceedings of the 9th International Conference on Computational Science: Part I (Berlin, Heidelberg, 2009), ICCS ’09, Springer-Verlag, pp. 269–279.

[33] Kell, S. Rethinking software connectors. In Proceedings of the International workshop on Synthesis and analysis of component connectors: in conjunction with the 6th ESEC/FSE joint meeting (New York, NY, USA, 2007), SYANCO ’07, ACM, pp. 1–12.

[34] Kiczales, G., Irwin, J., Lamping, J., Loingtier, J.-M., Lopes, C. V., Maeda, C., and Mendhekar, A. Aspect-oriented programming. In Proceedings of the 11th European Conference on Object-Oriented Programming (ECOOP’97) (Berlin, November 1997), vol. 1241 of Lecture Notes in Computer Science, Springer, p. 220–242.

[35] Kim, D. K., Tilevich, E., and Ribbens, C. J. Dynamic software updates for parallel high-performance applications. Concurrency and Computation: Practice & Experience 23, 4 (March 2011), 415–434.

[36] Kleinoder, J., and Golm, M. Metajava: an efficient run-time meta architecture for java/sup tm/. In Proceedings of the 5th International Workshop on Object Orientation in Operating Systems (IWOOOS ’96) (Washington, DC, USA, 1996), IWOOOS ’96, IEEE Computer Society, pp. 54–.

[37] Kramer, J., and Magee, J. The evolving philosophers problem: Dynamic change management. IEEE Trans. Softw. Eng. 16, 11 (Nov. 1990), 1293–1306. [38] Kurzyniec, D., and Others. Towards Self-Organizing Distributed Computing Frameworks: The H2O Approach. Parallel Processing Letters 13, 2 (2003), 273–290.

[39] Lau, K.-K., Velasco Elizondo, P., and Wang, Z. Exogenous connectors for software components. In Proceedings of the 8th international conference on Component-Based Software Engineering (Berlin, Heidelberg, 2005), CBSE’05, Springer-Verlag, pp. 90–106.

[40] Lau, K.-K., and Wang, Z. Software component models. IEEE Transactions on Software Engineering 33, 10 (October 2007), 709–724.

[41] Léger, M., Ledoux, T., and Coupaye, T. Reliable dynamic reconfigurations in the fractal component model. In Proceedings of the 6th international workshop on Adaptive and reflective middleware: held at the ACM/IFIP/USENIX International Middleware Conference (New York, NY, USA, 2007), ARM ’07, ACM, pp. 3:1–3:6.

[42] Liang, S. Java Native Interface: Programmer’s Guide and Reference, 1st ed. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1999. [43] Luckham, D. C., and Vera, J. An event-based architecture definition

language. IEEE Transactions on Software Engineering 21, 9 (September 1995), 717–734.

[44] Lusk, E., and Yelick, K. Languages for High-Productivity Computing - The DARPA HPCS Language Support. Parallel Processing Letters, 1 (2007), 89–102.

[45] Magee, J., Dulay, N., Eisenbach, S., and Kramer, J. Specifying distributed software architectures. In Software Engineering — ESEC ’95, W. Schäfer and P. Botella, Eds., vol. 989 of Lecture Notes in Computer Science. Springer Berlin / Heidelberg, 1995, pp. 137–153.

[46] Magee, J., and Kramer, J. Dynamic structure in software architectures. SIGSOFT Softw. Eng. Notes 21, 6 (October 1996), 3–14.

[47] Malawski, M., Bartynski, T., Ciepiela, E., Kocot, J., Pelczar, P., and Bubak, M. An ADL-based support for CCA components on the Grid. In Proceeding of the CoreGRID Workshop on Grid Systems, Tools and Environments in Conjunction with GRIDS@work: CoreGRID Conference, Grid Plugtests and Contest (Sophia-Antipolis, France, December 2006).

[48] May, M. D., Taylor, R. J. B., and Whitby-Strevens, C. Epl: an experimental language for distributed computing. In Proceeding of the Trends and Applications: Distributed Processing (May 1978), National Bureau of Standards, pp. 69–71.

Referências Bibliográficas 132

[49] McKinley, P., Sadjadi, S., Kasten, E., and Cheng, B. Composing adaptive software. Computer 37, 7 (July 2004), 56 – 64.

[50] Medvidovic, N., Dashofy, E. M., and Taylor, R. N. Moving architectural description from under the technology lamppost. Information and Software Technology 49, 1 (January 2007), 12–31.

[51] Medvidovic, N., and Taylor, R. N. A classification and comparison framework for software architecture description languages. IEEE Transactions on Software Engineering 26, 1 (January 2000), 70–93.

[52] Mehta, N. R., Medvidovic, N., and Phadke, S. Towards a taxonomy of software connectors. In Proceedings of the 22nd international conference on Software engineering (New York, NY, USA, 2000), ICSE ’00, ACM, pp. 178–187.

[53] Meyer, B. Object-Oriented Software Construction, 2 ed. Interactive Software Engineering Inc. (ISE), 1997.

[54] Object Management Group. The Common Object Request Broker: Architecture and Specification, June 1995. Revision 2.0.

[55] Object Management Group. OMG Unified Modeling Language, November 2007.

[56] Perry, D. E., and Wolf, A. L. Foundations for the study of software architecture. ACM SIGSOFT Software Engineering Notes 17, 4 (October 1992), 40–52.

[57] Pessemier, N., Seinturier, L., Duchien, L., and Coupaye, T. A component-based and aspect-oriented model for software evolution. International Journal of Computer Applications in Technology 31, 1/2 (March 2008), 94–105.

[58] Potter, K. Methods for presenting statistical information: The box plot. Hans Hagen, Andreas Kerren, and Peter Dannenmann (Eds.), Visualization of Large and Unstructured Data Sets, GI-Edition Lecture Notes in Informatics (LNI) S-4 (2006), 97–106.

[59] Pressman, R. S. Software Engineering: A Practitioner’s Approach, 5th ed. McGraw-Hill Higher Education, 2001.

[60] Sessions, R. COM and DCOM: Microsoft’s Vision for Distributed Objects. John Wiley & Sons, 1997.

[61] SGS-THOMSON Microelectronics Limited. Occam 2.1 Reference Manual, May 1995. Document number: 72 occ 45 03.

[62] Shaw, M. Procedure calls are the assembly language of software interconnection: Connectors deserve first-class status. In Selected papers from the Workshop on Studies of Software Design (London, UK, 1996), ICSE ’93, Springer-Verlag, pp. 17–32.

[63] Shaw, M., and Garlan, D. Characteristics of higher-level languages for software architecture. Tech. Rep. CMU-CS-94-210, Carnegie Mellon University, School of Computer Science, December 1994.

[64] Shaw, M., and Garlan, D. Software architecture: perspectives on an emerging discipline. Prentice-Hall, Inc., Upper Saddle River, NJ, USA, 1996. [65] Sipser, M. Introdução à Teoria da Computação: Tradução da 2a edição

norte-americana (trad. Ruy José Guerra Barreto de Queiroz). Thomson Learning, São Paulo, 2007.

[66] Smith, J. E., and Nair, R. The architecture of virtual machines. Computer 38, 5 (May 2005), 32–38.

[67] Soria, C. C., Irshaid, N. A., Benedí, J. P., Cubel, J. A. C., and Salavert, I. R. Dynamic reconfiguration of software architectures through aspects. In Proceeding of the 1st European Conference on Software Architecture (ECSA’07) (Heidelberg, September 2007), vol. 4758 of Lecture Notes on Computer Science, Springer, pp. 279–283.

[68] Wang, A. J. A., and Qian, K. Component Oriented Programming. John Wiley & Sons, Inc., March 2005. ISBN 0-471-64446-3.

[69] Wegdam, M. Dynamic Reconfiguration and Load Distribution in Component Middleware. PhD thesis, Centre for Telematics and Information Technology, University of Twente, 2003.

Referências Bibliográficas 134

[70] Young, A., and Magee, J. A flexible approach to evolution of reconfigurable systems. In International Workshop on Configurable Distributed Systems (March 1992), pp. 152 –163.

Configuração main do conector

impl.sp.solve.connector.SolverImpl

action main begin SEQ begin start: f orward.begin lhs.begin

read_buf f er_f orward.begin write_buf f er_f orward.begin lhs.go

lhs.advance f orward.go f orward.advance

!f orward.f inished? SEQ[repeat = true] begin

write_buf f er_f orward.go write_buf f er_f orward.advance read_buf f er_f orward.advance shif t_f orward.initiate_send shif t_f orward.initiate_recv lhs.go

lhs.advance shif t_f orward.go

read_buf f er_f orward.go f orward.go

f orward.advance

136 end backward.begin matvecproduct.begin read_buf f er_backward.begin write_buf f er_backward.begin backward.init backward.go backward.advance

!backward.f inished? SEQ[repeat = true] begin write_buf f er_backward.go write_buf f er_backward.advance read_buf f er_backward.advance shif t_backward.initiate_send shif t_backward.initiate_recv matvecproduct.go matvecproduct.advance shif t_backward.go read_buf f er_backward.go backward.go backward.advance end end: matvecproduct.go end end