• Nenhum resultado encontrado

A.1 Exemplo da IR do método setImports

5.3 Estudos Sobre Coleções

Com relação aos estudos sobre o consumo de energia de coleções, Hasan et al. (2016) analisaram o consumo de energia das operações mais comuns, como por exemplo inserção no início, no meio e no final, entre 17 implementações das interfaces List, Maps e Set da linguagem Java. A agregação dessas informações de consumo define o perfil de consumo de energia das estruturas de dados. Os resultados mostraram que, dependendo das operações, o consumo de energia pode variar significativamente de acordo com as estruturas de dados. Além disso, foi demonstrado que o contexto do uso das estruturas de dados e os perfis de consumo de energia podem ajudar a decidir qual a alternativa mais eficiente dentre as implementações das coleções. Os perfis indicaram também como o consumo de energia dessas implementações variam de acordo com o tamanho da entrada e os tipos de dados. Verificaram que escolher as estruturas de dados erradas podem resultar em 300% mais energia que a alternativa mais eficiente.

Ademais, Pereira et al. (2016) também realizaram um estudo com relação ao consumo de energia das estruturas de dados do Java Collections Framework (JCF) – 24 implementações

5.3. ESTUDOS SOBRE COLEÇÕES 59 de List, Map e Set. Eles analisaram o consumo de energia para cada método das coleções para diferentes quantidades de dados. O trabalho apresentou uma abordagem para otimização do consumo de energia baseada nas chamadas dos métodos das coleções no código das aplicações. Assim, foi analisado quais métodos e implementações são usadas no código da aplicação, e então, utilizando os dados de consumo de energia, verificam quais implementações equivalentes têm os menores consumos de energia para os métodos específicos. Dessa forma, eles obtiveram uma otimização de até 6.2% no consumo de energia em um conjunto de aplicações Java construídas no curso de orientação a objetos por alunos de Graduação em Ciência da Computação. Esse estudo se diferencia deste trabalho, principalmente, pois ele não utiliza técnicas de análise estática para detectar a frequência de uso das operações das coleções. Eles apenas verificam quais operações são usadas.

Gutiérrez, Pollock and Clause (2014) implementaram uma ferramenta automatizada para otimizar o consumo de energia das aplicações. Esta ferramenta realiza um processo exaustivo de tentativa e erro para todas as implementações de estruturas de dados compatíveis com uma determinada interface e mede o impacto no consumo de energia para cada uma delas, a partir de uma suíte de testes. Com a utilização desta ferramenta, foi observada uma melhoria no consumo de energia de até 17%.

O desempenho das coleções também é uma importante área de pesquisa. Xu (2013), apresentou uma técnica de otimização dinâmica chamada CoCo, que explora vantagens claras dos algoritmos das coleções de Java (por exemplo, complexidade mais baixa no pior caso possível) para melhorar seu desempenho. A ferramenta identifica, dinamicamente, os objetos de coleções Java como ArrayList e LinkedList que seriam seguramente substituídos em tempo de execução. Após a realização da troca, foi observado uma melhoria de até 14.6%, no desempenho das aplicações alvo.

A metodologia para elaboração dos perfis de energia para estruturas de dados seguras para threads foi baseada no estudo de Pinto et al. (2016). Nesse trabalho, os autores realizaram um estudo empírico focando em estruturas de dados concorrentes. Dentre os achados, os autores verificaram que diferentes implementações da mesma estrutura de dados segura para threads podem ter comportamentos bastante diferentes com relação ao consumo de energia. Por exemplo, CopyOnWriteArrayListconsumiu até 152x mais energia que Vector para operações de inserção, por outro lado, para as operações de leitura, CopyOnWriteArrayList consumiu até 46.38x menos que Vector. No entanto, o trabalho de Pinto et al. (2016) não propõe nenhum modelo para recomendar a utilização de uma determinada estrutura de dados.

A abordagem deste trabalho difere dos demais trabalhos em vários detalhes. Primeiro, a abordagem proposta neste trabalho tem foco em ambientes concorrentes utilizando estruturas de dados concorrentes. Segundo, a heurística apresentada não é restrita para tipos de estrutura de dados específicas, pois esta se baseia numa aproximação mais fidedigna da quantidade de vezes que uma operação poderia ser chamada durante sua execução, apesar de não executá-la. Terceiro, a abordagem utilizada neste trabalho é intrinsecamente estática, não necessitando

5.3. ESTUDOS SOBRE COLEÇÕES 60 executar aplicações alvo, uma vez que o perfil de consumo de energia da coleção seja conhecido. A abordagem utiliza uma análise de perfis de consumos de energia para aplicações concorrentes, o qual simula o alto uso das estruturas de dados entre as threads da aplicação. Estes perfis de consumo independem da aplicação.

61 61 61

6

Conclusão

Em muitos dos contextos em que um sistema de software é desenvolvido, um problema crítico, porém comumente negligenciado, é o consumo de energia desses sistemas. Embora sistemas de software não consumam energia, eles afetam a utilização do hardware, conduzindo a um indireto consumo de energia.

Dessa forma, este trabalho apresentou uma abordagem que tem por objetivo recomendar a troca entre implementações de coleções para melhorar o consumo de energia de uma aplicação de software utilizando técnicas de análise estática. A principal vantagem da abordagem proposta é que, uma vez estabelecidos os perfis de consumo de energia das estruturas de dados para o ambiente no qual a aplicação irá rodar, ela é puramente estática. Assim, não há necessidade de executar a aplicação cujo consumo de energia se deseja reduzir.

Para implementar a abordagem proposta, foi criada a CECOTOOL, que realiza a análise estática inter-procedural da aplicação, coletando o uso das operações das coleções dentro do contexto de níveis de aninhamento de loops. Além disso, essa ferramenta realiza a recomendação de qual coleção usar baseada no uso das coleções pela aplicação e pelos perfis de consumo de energia das coleções.

Para avaliar a proposta foram utilizados dois benchmarks DaCapo – Xalan e o Tom- cat (BLACKBURN et al., 2006). Nesses benchmarks foram realizadas as transformações de acordo com as recomendações sugeridas pela CECOTOOL. Após aplicar as recomendações, verificou-se uma redução do consumo de energia em até 4.37%, sugerindo que é possível melhorar o consumo de energia de uma aplicação através de uma abordagem estática para recomendação de estruturas de dados (QP1). Além disso, verificou-se também que a maioria das transformações realizadas foram bastante simples, sendo realizadas apenas trocas de tipos de implementação de coleção, sugerindo que a troca de implementações de estruturas de dados com o objetivo de reduzir o consumo de energia é relativamente simples (QP2).

6.1 Trabalhos Futuros

Para trabalhos futuros destacam-se:

6.1. TRABALHOS FUTUROS 62 mero de benchmarks representativos, e que façam uso de conjuntos. Devido ao não uso desse tipo de coleção pelos benchmarks analisados não foi possível verificar o resultados das trocas entre suas respectivas implementações. Outrossim, aumentar o escopo da análise utilizando outras construções de linguagens de programação além do uso de coleções.

 Aprimorar a aproximação da contagem da frequência de uso das coleções utili-

zando técnicas de predição de número de iterações para ter uma aproximação mais real do uso das coleções. Pode-se levar em consideração também outras informações como complexidade dos loops e recursividade dos métodos para aprimorar o peso do uso das coleções. Alem disso, aprimorar a precisão da análise estática, por exemplo, através de uma análise inter-procedural de definição-uso mais sofisticada, a fim de melhorar a precisão das recomendações.

 Automatizar o processo de transformação das aplicações utilizando técnicas de

refatoração, além de garantir o comportamento das aplicações pós refatoração.

 Analisar o desempenho das aplicações transformadas, com o objetivo de verificar

se as transformações realizadas, além terem reduzido o consumo de energia, também impactaram no desempenho das aplicações.

 Utilizar de medidas de precisão, como precision e recall, como forma de melhor

entender a eficiência das recomendações propostas. Dessa forma, pode-se verificar quais das recomendações realmente foram relevantes para a redução do consumo de energia e quantas das recomendações relevantes foram de fato recomendadas pela abordagem.

63 63 63 Referências

AGGARWAL, K.; HINDLE, A.; STROULIA, E. Greenadvisor: A tool for analyzing the impact of software evolution on energy consumption. In: 2015 IEEE International Conference on Software Maintenance and Evolution, ICSME 2015, Bremen, Germany, September 29 - October 1, 2015. [s.n.], 2015. p. 311–320. Disponível em: <http: //dx.doi.org/10.1109/ICSM.2015.7332477>.

AGGARWAL, K. et al. The power of system call traces: predicting the software energy consumption impact of changes. In: Proceedings of 24th Annual International Conference on Computer Science and Software Engineering, CASCON 2014, Markham, Ontario, Canada, 3-5 November, 2014. [s.n.], 2014. p. 219–233. Disponível em: <http://dl.acm.org/citation.cfm?id=2735546>.

ALDRICH, J. Lecture Notes: Interprocedural Analysis. 2013. Carnegie Mellon University,

https://www.cs.cmu.edu/ aldrich/courses/15-819O-13sp/resources/ interprocedural.pdf.

ALDRICH, J. Lecture Notes: Object-Oriented Call Graph. 2013. Carnegie Mellon University,

https://www.cs.cmu.edu/ aldrich/courses/15-819O-13sp/resources/ callgraph.pdf.

Apache Tomcat. 2016. URL:http://tomcat.apache.org/.

APPEL, A. W.; PALSBERG, J. Modern Compiler Implementation in Java, 2nd edition. [S.l.]: Cambridge University Press, 2002. ISBN 0-521-82060-X.

BALL, T.; LARUS, J. R. Branch prediction for free. In: Proceedings of the ACM SIGPLAN’93 Conference on Programming Language Design and Implementation (PLDI), Albuquerque, New Mexico, USA, June 23-25, 1993. [s.n.], 1993. p. 300–313. Disponível em: <http://doi.acm.org/10.1145/155090.155119>.

BLACKBURN, S. M. et al. The DaCapo benchmarks: Java benchmarking development and analysis. In: OOPSLA ’06: Proceedings of the 21st annual ACM SIGPLAN conference on Object-Oriented Programing, Systems, Languages, and Applications. New York, NY, USA: ACM Press, 2006. p. 169–190.

CLIFF, N. Dominance statistics: Ordinal analyses to answer ordinal questions. Psychological Bulletin, American Psychological Association, v. 114, n. 3, p. 494–509, nov. 1993. ISSN 1939-1455.

CYTRON, R. et al. Efficiently computing static single assignment form and the control dependence graph. ACM Trans. Program. Lang. Syst., v. 13, n. 4, p. 451–490, 1991. Disponível em: <http://doi.acm.org/10.1145/115372.115320>.

DAVID, H. et al. RAPL: memory power estimation and capping. In: Proceedings of the 2010 International Symposium on Low Power Electronics and Design, 2010, Austin, Texas, USA, August 18-20, 2010. [s.n.], 2010. p. 189–194. Disponível em: <http://doi.acm.org/10.1145/1840845.1840883>.

REFERÊNCIAS 64 DIG, D.; MARRERO, J.; ERNST, M. D. Refactoring sequential java code for concurrency via concurrent libraries. In: 31st International Conference on Software Engineering, ICSE 2009. [S.l.: s.n.], 2009. p. 397–407.

DYER, R. et al. Boa: A language and infrastructure for analyzing ultra-large-scale software repositories. In: Proceedings of the 2013 International Conference on Software Engineering. [S.l.: s.n.], 2013. (ICSE ’13), p. 422–431. ISBN 978-1-4673-3076-3.

GELENBE, E.; CASEAU, Y. The impact of information technology on energy consumption and carbon emissions. Ubiquity, v. 2015, n. June, p. 1:1–1:15, jun. 2015. ISSN 1530-2180.

GUTIÉRREZ, I. L. M.; POLLOCK, L. L.; CLAUSE, J. SEEDS: a software engineer’s energy-optimization decision support framework. In: 36th International Conference on Software Engineering, ICSE ’14, Hyderabad, India - May 31 - June 07, 2014. [s.n.], 2014. p. 503–514. Disponível em: <http://doi.acm.org/10.1145/2568225.2568297>.

HÄHNEL, M. et al. Measuring energy consumption for short code paths using RAPL. SIGMETRICS Performance Evaluation Review, v. 40, n. 3, p. 13–17, 2012. Disponível em: <http://doi.acm.org/10.1145/2425248.2425252>.

HAO, S. et al. Estimating mobile application energy consumption using program analysis. In: Proceedings of the 35th International Conference on Software Engineering (ICSE). [S.l.: s.n.], 2013.

HASAN, S. et al. Energy profiles of java collections classes. In: Proceedings of the 38th International Conference on Software Engineering, ICSE 2016, Austin, TX, USA, May 14-22, 2016. [s.n.], 2016. p. 225–236. Disponível em: <http://doi.acm.org/10.1145/2884781.2884869>. HEALY, C. A. et al. Bounding loop iterations for timing analysis. In: Proceedings

of the Fourth IEEE Real-Time Technology and Applications Symposium, RTAS’98, Denver, Colorado, USA, June 3-5, 1998. [s.n.], 1998. p. 12–21. Disponível em: <http://dx.doi.org/10.1109/RTTAS.1998.683183>.

LI, D. et al. An empirical study of the energy consumption of android applications. In: ICSME. [S.l.: s.n.], 2014.

LI, D. et al. Calculating source line level energy information for android applications. In: Proceedings of the International Symposium on Software Testing and Analysis (ISSTA). [S.l.: s.n.], 2013.

LI, D.; TRAN, A. H.; HALFOND, W. G. J. Making web applications more energy efficient for oled smartphones. In: ICSE. [S.l.: s.n.], 2014. p. 527–538.

LIMA, L. G. et al. Haskell in green land: Analyzing the energy behavior of a purely functional language. In: IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering, SANER 2016, Suita, Osaka, Japan, March 14-18, 2016. [s.n.], 2016. p. 517–528. Disponível em: <http://dx.doi.org/10.1109/SANER.2016.85>.

LINARES-VáSQUEZ, M. et al. Mining energy-greedy api usage patterns in android apps: An empirical study. In: MSR. [S.l.: s.n.], 2014. p. 2–11.

REFERÊNCIAS 65 LIU, K.; PINTO, G.; LIU, Y. D. Data-oriented characterization of application-level energy optimization. In: Fundamental Approaches to Software Engineering - 18th International Conference, FASE 2015, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2015, London, UK, April 11-18, 2015. Proceedings. [s.n.], 2015. p. 316–331. Disponível em: <http://dx.doi.org/10.1007/978-3-662-46675-9_21>.

MØLLER, A.; SCHWARTZBACH, M. I. Static Program Analysis. 2015. Department of Computer Science, Aarhus University,http://cs.au.dk/˜amoeller/spa/.

NIELSON, F.; NIELSON, H. R.; HANKIN, C. Principles of program analysis. Springer, 1999. ISBN 978-3-540-65410-0. Disponível em: <http://dx.doi.org/10.1007/978-3-662-03811-6>. PEREIRA, R. et al. The influence of the java collection framework on overall energy consumption. CoRR, abs/1602.00984, 2016. Disponível em: <http://arxiv.org/abs/1602.00984>. PINTO, G.; CASTOR, F.; LIU, Y. D. Mining questions about software energy consumption. In: Proceedings of the 11th Working Conference on Mining Software Repositories. [S.l.: s.n.], 2014. (MSR 2014), p. 22–31. ISBN 978-1-4503-2863-0.

PINTO, G.; CASTOR, F.; LIU, Y. D. Understanding energy behaviors of thread management constructs. In: Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications. New York, NY, USA: ACM, 2014. (OOPSLA ’14), p. 345–360. ISBN 978-1-4503-2585-1. Disponível em: <http://doi.acm.org/10.1145/2660193.2660235>.

PINTO, G. et al. A comprehensive study on the energy efficiency of java thread-safe collections. In: 2015 IEEE International Conference on Software Maintenance and Evolution, ICSME 2016, Raleigh, USA. [S.l.: s.n.], 2016.

RICE, H. G. Classes of recursively enumerable sets and their decision problems. Trans. Amer. Math. Soc., v. 74, p. 358–366, 1953.

RODRIGUES, R. E. Real-world loops are easy to predict. In: Programming Languages - 18th Brazilian Symposium, SBLP 2014, Maceio, Brazil, October 2-3, 2014. Proceedings. [s.n.], 2014. p. 124–138. Disponível em: <http://dx.doi.org/10.1007/978-3-319-11863-5_9>.

ROTEM, E. et al. Power-management architecture of the intel microarchitecture code-named sandy bridge. IEEE Micro, v. 32, n. 2, p. 20–27, 2012. Disponível em: <http://dx.doi.org/10.1109/MM.2012.12>.

SAHIN, C.; POLLOCK, L.; CLAUSE, J. How do code refactorings affect energy usage? In: Proceedings of the 8th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement. [S.l.: s.n.], 2014. (ESEM ’14), p. 36:1–36:10. ISBN 978-1-4503-2774-9. VARGHA, A.; DELANEY, H. D. A Critique and Improvement of the CL Common Language Effect Size Statistics of McGraw and Wong. Journal on Educational and Behavioral Statistics, v. 25, n. 2, p. 101–132, 2000.

WALA - T.J. Watson Libraries for Analysis. 2016. URL:http://wala.sourceforge.net/wiki/index.php/.

REFERÊNCIAS 66 WILKS, D. Statistical Methods in the Atmospheric Sciences. Academic Press, 2011. (Academic Press). ISBN 9780123850225. Disponível em: <https://books.google.com.br/books?id= IJuCVtQ0ySIC>.

WU, Y.; LARUS, J. R. Static branch frequency and program profile analysis. In: Proceedings of the 27th Annual International Symposium on Microarchitecture, San Jose, California, USA, November 30 - December 2, 1994. [s.n.], 1994. p. 1–11. Disponível em: <http://dx.doi.org/10.1109/MICRO.1994.717399>.

Xalan - The Apache XML Project. 2016. URL:https://xml.apache.org/xalan-j/.

XU, G. H. Coco: Sound and adaptive replacement of java collections. In: ECOOP 2013 - Object-Oriented Programming - 27th European Conference, Montpellier, France, July 1-5, 2013. Proceedings. [s.n.], 2013. p. 1–26. Disponível em: <http: //dx.doi.org/10.1007/978-3-642-39038-8_1>.

68 68 68

A

Exemplo de Representação Intermediária

Documentos relacionados