
handle: 1822/76785
Aplicações científicas simulam o mundo real através de modelos matemáticos. As simulações destes modelos necessitam de grande poder computacional, existente nas arquiteturas atuais. Contudo, para aceder a esse poder computacional, o programador necessita de desenvolver a aplicação de acordo com a plataforma de execução, o que introduz complexidade no desenvolvimento da aplicação. Nas abordagens tradicionais estas adaptações/otimizações estão misturadas no código do domínio originando dois problemas: primeiro, o código fica dependente da plataforma, sendo que a execução numa plataforma distinta obriga a uma reescrita do código; segundo, o código relativo à otimização mistura-se com o código do domínio, dificultando a perceção do mesmo. As linguagens orientadas ao objeto são reconhecidas por explicitar os conceitos do domínio no código. Porém, a sua utilização introduz tipicamente uma elevada sobrecarga na execução da aplicação limitando a sua utilização em aplicações cientificas. Isso explica o motivo pelo qual o Java, uma das linguagens orientadas ao objeto mais utilizadas, não é usada neste tipo de aplicações. Java utiliza a compilação dinâmica para remover as sobrecargas das linguagens orientadas ao objeto, quando os conceitos mais avançados não são utilizados (exemplo polimorfismo), como é, frequente, no caso das aplicações científicas. A abordagem apresentada nesta tese permite adiar a implementação das otimizações para fases posteriores do desenvolvimento, escondendo o mapeamento de dados. Por outro lado, permite especificar nas fases finais do desenvolvimento várias optimisações: o processamento em subdomínios, empacotamento de dados e ordenação dos dados em memória. Por fim, permite a execução paralela ocultando detalhes de implementação. Para isso separa o desenvolvimento em duas fases distintas: escrita do código de domínio e fase de otimização. A fase de otimização é adiada para fase final do desenvolvimento, o que permite uma fácil adaptação à plataforma de execução. A abordagem permite aplicar estas otimizações através de dois mecanismos: primeiro, alteração do mapeamento das coleções; e segundo, decomposição do problema em subproblemas. Ambas as otimizações são introduzidas no programa pelo programador de uma forma simples (pequeno custo de desenvolvimento) mantendo os conceitos de domínio. Primeiro, a alteração do layout baseia-se no conceito de procurador, cria um objeto temporário o que permite ao utilizador usar vários mapeamentos com a mesma API. Em segundo lugar, o mecanismo de decomposição de domínio suporta outras otimizações comuns: processamento de dados em blocos, empacotamento, execução paralela e dados privados aos fios de execução. O mecanismo é implementado por anotações de código, evitando alterações mais invasivas. A abordagem foi avaliada com um conjunto de casos de estudo: soma de um vector, daxpy, JECoLi, simulação de dinâmica molecular e multiplicação de matrizes. Este conjunto permitiu validar a abordagem em diferentes casos e a sobrecarga introduzida na execução. A adaptação do código de domínio para suportar a abordagem foi mais simples do que alterar o mapeamento de dados no código de domínio. Em todos os casos, a abordagem obteve uma performance similar às abordagens tradicionais. No caso do MD, exemplo que suporta mais otimizações, o uso da abordagem proporcionou um ganho de 50X no tempo de execução. Os outros casos de estudos obtiveram ganhos entre 20x e 40x. A JECoLi teve um ganho mais baixo (1,6x), já que neste caso apenas foi possível aplicar a otimização do mapeamento dos dados. Esses ganhos mostram a viabilidade da abordagem que permitiu obter códigos eficientes.
Organização de dados, Data layout, Execução paralela, Otimizações para hierarquia de memória, Tiling, Java, Optimisations for memory hierarchy, Parallel execution
Organização de dados, Data layout, Execução paralela, Otimizações para hierarquia de memória, Tiling, Java, Optimisations for memory hierarchy, Parallel execution
| selected citations These citations are derived from selected sources. This is an alternative to the "Influence" indicator, which also reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically). | 0 | |
| popularity This indicator reflects the "current" impact/attention (the "hype") of an article in the research community at large, based on the underlying citation network. | Average | |
| influence This indicator reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically). | Average | |
| impulse This indicator reflects the initial momentum of an article directly after its publication, based on the underlying citation network. | Average |
