Programação Paralela com Processadores Multicores Desenvolvidos em Linguagem Fortran

Documentos relacionados
PROCESSADORES Unidade de Controle Unidade Aritmética e Lógica efetua memória de alta velocidade registradores Program Counter Instruction Register

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

Computadores e Programação (DCC/UFRJ)

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

OpenMP: Variáveis de Ambiente

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

30/5/2011. Sistemas computacionais para processamento paralelo e distribuído

Introdução OpenMP. Nielsen Castelo Damasceno

ESTRATÉGIAS DE OTIMIZAÇÃO DE CÓDIGO EM OPENCL

COMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES. Adão de Melo Neto

Arquitetura e Organização de Processadores. Aula 1. Introdução Arquitetura e Organização

SSC0611 Arquitetura de Computadores

Sistemas de Informação. Sistemas Operacionais

Arquitetura de Computadores. Processamento Paralelo

Introdução aos Conceitos de Computação Paralela através da estimativa de Pi

Paralelismo em Computadores com Tecnologia Multicore

A IMPORTÂNCIA DE THREADS NO DESEMPENHO DE APLICAÇÕES

Ferramentas para Programação em Processadores Multi-Core

Atol Fortin, Bruno da Hora, Lucas Piva, Marcela Ortega, Natan Lima, Pedro Raphael, Ricardo Sider, Rogério Papetti. 28 de novembro de 2008

Sistemas Distribuídos e Paralelos

Introdução à Programação Paralela através de Padrões. Denise Stringhini Calebe Bianchini Luciano Silva

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend

The future is parallel but it may not be easy

Concorrência em Processos

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

Microarquiteturas Avançadas

Sistemas Operacionais

Programação Concorrente

SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella

What is? Eduardo Viola Nicola Disciplina de IPPD

Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela. Professor: Francisco Ary

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

Definindo melhor alguns conceitos

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Arquitetura de Microprocessadores

Algoritmos e Lógica de Programação Sistemas Operacionais

Montagem e manutenção de computadores

Universidade Federal de Ouro Preto

Introdução a Sistemas Operacionais. Adão de Melo Neto

Tecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2)

ANÁLISE DE DESEMPENHO COM A PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PERFEITOS 1

ORGANIZAÇÃO CURRICULAR TÉCNICO NA ÁREA DE INFORMÁTICA: HABILITAÇÃO TÉCNICO EM INFORMÁTICA NA MODALIDADE A DISTÂNCIA /1

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 02

Arquiteturas de Computadores. Fundamentos de Projetos de Computadores

Universidade Federal do Rio de Janeiro Informática DCC/IM. Arquitetura de Computadores II. Arquiteturas MIMD. Arquiteturas MIMD

Sistemas Distribuídos

O estado de arte: a evolução de computação de alto desempenho

Multiprogramação leve em arquiteturas multi-core

SEL-0415 Introdução à Organização de Computadores Aula 2 Prof. Dr. Marcelo Andrade da Costa Vieira

Resolução de Problemas com Computador. Resolução de Problemas com Computador. Resolução de Problemas com Computador

Desempenho. Na otimização do projeto, as métricas mais importantes são custo e desempenho. Arquiteturas de Alto Desempenho - Prof a Luiza Mourelle 1

Sistemas Operacionais. Prof. Fabio Augusto Oliveira

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

ARQUITETURA DE COMPUTADORES

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

Organização e Arquitetura de Computadores I

SISTEMAS OPERACIONAIS

Aula 12. Aquisição de Hardware

Benchmarks. 1. Introdução

Arquiteturas RISC e CISC. Adão de Melo Neto

Thread. Thread. Sistemas Operacionais. Leonard B. Moreira. UNIVERSIDADE ESTÁCIO DE SÁ fevereiro, / 41

Introdução Computador Hardware Histórico e Evolução Linguagem de Programação Princípios Básicos

Introdução à OpenMP (Dia 1) Prof. Guido Araujo

Engenharia de Software II

Arquiteturas Paralelas

AULA. Processamento de Dados

Unidade 12: Introdução ao Paralelismo:

Arquitetura de Computadores Paralelos. Introdução Conceitos Básicos Ambientes de Programação Modelos de Programação Paralela

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Modelo de Programação Paralela

Computação Paralela (CUDA)

SSC PROGRAMAÇÃO CONCORRENTE. Aula 03 Terminologia Geral de Computação Paralela Prof. Jó Ueyama

EA869 Pipeline. Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof.

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Unidade I. Organização de Computadores. Prof. Renato Lellis

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

Organização de Sistemas de Computadores

SSC0611 Arquitetura de Computadores

Introdução à Computação para Engenharia MAC2166 Prof. Dr. Paulo Miranda IME-USP. Aula 1 Introdução à Computação

CONCURSO PÚBLICO PARA PROVIMENTO DE CARGO EFETIVO PROFESSOR DE ENSINO BÁSICO, TÉCNICO E TECNOLÓGICO Edital 20/2015 Campus Rio Pomba FOLHA DE PROVA

Introdução ao Controladores Lógicos Programáveis - CLP

14/3/2016. Prof. Evandro L. L. Rodrigues

Introdução à Computação: Sistemas de Computação

4a. Geração VLSI 1980 à????

Arquitetura de Computadores

Carlos Eduardo Batista Centro de Informática - UFPB

Programação Paralela e Distribuída

Linguagens de Programação

Linguagens de Programação

Nome: N.º Ano: Turma: Turno: Responde às seguintes questões 1. Quais as vantagens da utilização de transístores face às válvulas de vácuo?

Sistema Distribuído. Sistema Distribuído. Aplicações Distribuídas. Conceitos Básicos

Transcrição:

Programação Paralela com Processadores Multicores Desenvolvidos em Linguagem Fortran Carlos A. Reyna 1, Pedro C. Pereira 1, Loram Siqueira 2 (1) Depto de Matemática, Instituto de Ciências Exatas. (2) Depto de Engenharia de Agrimensura e Cartográfica, Instituto de Tecnologia, Universidade Federal Rural do Rio de Janeiro, Caixa Postal, 74517, Seropédica, 22221-000, RJ (Brasil) (candres@ufrrj.br) RESUMO Diversos trabalhos foram desenvolvidos ao longo dos últimos anos relacionados ao estudo da programação paralela, sejam sistemas com memória distribuída ou memória compartilhada. Mais recentes foram os estudos dos processadores multicore que trouxeram importantes benefícios tanto desde o ponto de vista do desempenho como do espaço físico necessário para montar um sistema destes. O rápido desenvolvimento dos processadores multicore atualmente sendo o i7 o modelo comercial mais novo no mercado pode realizar até 8 procedimentos em paralelo. Neste trabalho o objeto de estudo é o software desenvolvido pela Intel chamado de Parallel Studio XE 2013. Este software proporciona um ótimo rendimento em aplicações de alto nível permitindo que desenvolvedores C/C++ e Fortran possam escrever seus códigos de programação paralela de forma correta, identificando e consertando problemas de memória, erros de threading difíceis de identificar antes de serem lançados para uso, dentre outros. Assim, serão apresentados os diferentes componentes deste software e com ajuda de um exemplo mostrar os benefícios desta ferramenta. No final, as conclusão mostraram como esta ferramenta pode ser útil no desenvolvimento de softwares otimizados para uso em aplicações que utilizam grande quantidade de processamento computacional com mínimo esforço. INTRODUÇÃO A linguagem de programação Fortran vem sendo utilizada amplamente pelos pesquisadores em diversas áreas das ciências e engenharia. Em particular, a comunidade que desenvolve pesquisa com o Método dos Elementos de Contorno (Brebbia, Telles e Wrobel, 1984) o uso do Fortran (Chapman, 2008) é muito forte. Existe uma tendência a considerar que o Fortran não se desenvolveu ou não acompanhou as tendências da programação atual como são a programação orientada a objeto e a programação paralela, mas como será apresentado adiante o Fortran oferece todos os recursos das linguagens de alto nível. Por outro lado o uso dos clusters de computadores por muitos anos foi a grande ferramenta para o processamento paralelo, considerando que seu uso se justifica para grandes volumes de dados. O custo de um cluster de computadores e o espaço requerido para sua instalação afasta a possibilidade de uso para pesquisadores interessados em volumes menores de dados ou com recursos limitados. O surgimento dos processadores multicore tornou acessível para muitos profissionais a pesquisa acadêmica em computação paralela. Processadores multicores refletem os mais recentes avanços na arquitetura de processadores, trazendo o poder do processamento paralelo aos computadores domésticos e estendendo a

barreira da supercomputação. Basicamente, um processador é dito multicore quando possui dois ou mais núcleos completos de processamento (processadores) no mesmo chip. A arquitetura básica segue o modelo da arquitetura SMP (Symmetric Multi-Processors). Como nesta arquitetura, os diferentes processadores (ou cores) são capazes de executar fluxos de instruções de forma independente, e compartilham um espaço de endereçamento provido por uma área de memória comum. No caso das arquiteturas multicores, a eficiência e melhor desempenho podem ser percebidos ou não dependendo do sistema operacional e, principalmente, da aplicação. É provável que um usuário comum perceba a diferença ao mudar para um processador de dois cores. No entanto, na medida em que o número de cores aumenta, fica mais difícil perceber melhorias no desempenho, se as aplicações não forem devidamente adaptadas para explorar e expor mais o paralelismo de threads. Considerando a evolução na tecnologia de fabricação de circuitos integrados, não demorará muito tempo para que um número bem maior de cores por chip esteja disponível. Na presente proposta de trabalho pretende-se utilizar o processador Intel Core i7 e estudar os procedimentos para analisar, detectar e corrigir códigos seriais em processo de paralelização. Mas para isso será utilizado o software Intel Parallel Studio XE (Blair-Chappel and Stokes, 2012) for Windows, otimizado para aplicações de computação em paralelo e processadores de vários núcleos. Os programas a serem rodados são aplicações desenvolvidas utilizando o Método dos Elementos de Contorno. O SOFTWARE INTEL PARALLEL ESTUDIO XE O desenvolvimento de um software é conhecido na Engenharia de Software como ciclo de vida do software. De uma forma geral definem a ordem global das atividades a executar na elaboração de um projeto de software, é desenvolvida uma estratégia de construção, implementação e testes deste projeto. É preciso definir as necessidades do produto final, detalhes do processo, informações que sirvam para verificação intermediaria, grau de acurácia, etc. Na literatura pode-se encontrar diversos modelos de ciclo de vida. Neste trabalho considera-se o modelo incremental pois é o que mais se adequa ao trabalho desenvolvido pelos autores. Neste modelo incremental o desenvolvimento ocorre de forma gradual, onde cada estágio envolve a definição de metas bem estabelecidas com a implementação de procedimentos intermediários. Desta forma cada processo pode ser testado, verificado e corrigido até atender às expectativas do projeto. Desta forma evitase o número de riscos, pois eles serão sanados logo no início do estágio, existe maior visibilidade sobre o processo de desenvolvimento, auxilia na análise da estimativa de tempo gasto com o projeto, etc. Na Fig. 1 pode-se observar um esquema deste tipo de desenvolvimento de software. A microarquitetura Intel Core, distribuída comercialmente a partir de 2006 pela Intel Corporation veio trazer grandes desafios para os desenvolvedores, mas principalmente permitindo popularizar de uma forma mais democrática a programação em memória compartida. Antes disto os clusters de computadores dominaram por muitos anos a pesquisa científica e as aplicações de alto desempenho. Um cluster é formado por um conjunto de computadores, que utiliza um tipo

especial de sistema operacional classificado como sistema distribuído. É comum que seja construído a partir de computadores convencionais, os quais são ligados em rede e comunicamse através do sistema, trabalhando como se fossem uma única máquina de grande porte. O grande espaço físico necessário para montar um cluster é um item importante que deve ser levado em consideração. Concepção do Software Análise de Requisitos Projeto Arquitetural Estágio 1: Projeto Detalhado, implementação, depuração, teste e entrega. Estágio 2: Projeto Detalhado, implementação, depuração, teste e entrega. Estágio 3: Projeto Detalhado, implementação, depuração, teste e entrega. Fig. 1: Modelo de Desenvolvimento de Software do tipo Incremental. Uma das grandes vantagens na popularização dos clusters foi o custo benefício resultante da utilização de computadores pessoais, mais econômicos e fáceis de adquirir por parte da comunidade científica. Cluster é o nome dado a um sistema que relaciona dois ou mais computadores (em geral dezenas ou centenas) para que estes trabalhem de maneira conjunta no intuito de processar uma tarefa. Estas máquinas dividem entre si as atividades de processamento e executam este trabalho de maneira simultânea. (Alecrim, 2013) Nessa corrida pela melhora do desempenho e da capacidade de processamento de dados os fabricantes foram melhorando a CPU reduzindo a área do circuito integrado que diminui o custo por dispositivo. Desta forma mais transistores poderiam ser utilizados no projeto. Mas estas técnicas atingiram o seu limite e não puderam continuar a melhorar o desempenho da CPU, pelo contrário, espaço e altas temperaturas foram pontos críticos e limitantes para maiores avanços. Como alternativa foram desenvolvidos os processadores com vários núcleos, que foram chamados de processadores multicore, que apresentavam uma maior capacidade de resfriamento e que possibilitou o aumento do poder de processamento dos processadores.

Processadores multicore também permitem maior desempenho com menor energia. As outras vantagens quase que por completo relacionam-se com a capacidade de processamento, principalmente quando se trata da execução de mais de um aplicativo ao mesmo tempo ou mesmo em aplicativos capazes de realizar o seu processamento paralelamente, conseguindo assim trabalhar com dois ou mais núcleos concomitantemente. Nos processadores mais recentemente desenvolvidos existe também uma melhora no acesso a memória e na troca de dados entre os próprios núcleos. Porém, é importante destacar também que para que a qualidade de processamento paralelo dos multicores seja utilizada na sua totalidade os softwares instalados na máquina devem ser escritos para aproveitar esse recurso; para isso as aplicações devem ser escritas utilizando e armazenando os conceitos de threads, assim uma única aplicação utilizará o poder de processamentos dos dois ou mais processadores. (Aschermann e Roberto, 2007) E é baseado nessa necessidade de utilizar softwares eficientes e prontos para utilizar estes processadores muitcore que surge a importância de escrever os novos códigos de forma tal que possam trabalhar tanto com processadores singlecore como com 2 4 6 8 ou até 64 ou mais cores. Os códigos paralelizados não são novidade no meio acadêmico mas a popularização dos computadores multicore popularizou também o surgimento de novos programadores sem os conhecimentos profundos de um especialista na área. Juntando as várias necessidades, do mercado de grandes desenvolvedores em que produtividade, eficiência e custo são fundamentais, como de novos programadores, aliado ao rápido crescimento das novas tecnologias é que a Intel apresenta a suíte Intel Parallel Studio XE 2013 com o objetivo de proporcionar um desempenho superior para o aplicativo e ao mesmo tempo diminui o esforço e tempo gastos com programação, ajuste e testes. (Intel, 2013) Este software foi desenvolvido para ser utilizado por programadores de C/C++ e Fortran de grande aceitação na comunidade científica onde o alto custo de montagem de um cluster de computadores é um fator limitante na pesquisa. Os aplicativos de análise do Intel Parallel Studio XE aceleram drasticamente a habilidade de identificar problemas, encontrar e consertar problemas de memória e rastrear erros de encadeamento difíceis de isolar antes do uso no usuário final. E principalmente é uma ferramenta importante que ajuda programadores na hora de adicionar rotinas de paralelismo a os códigos em desenvolvimento oferecendo as melhores analises de apoio à decisão de onde é mais crítico o tempo de processamento computacional, por exemplo. O Intel Parallel Studio XE inclui as seguintes ferramentas de programação: Intel Parallel Advisor: O Parallel Advisor aconselha sobre como e onde adicionar paralelismo a um programa. Ele acha regiões com grande potencial para aumento da performance e identifica problemas críticos de

sincronização. Por outro lado permite avaliar melhor as alternativas antes de investir esforços na implementação; estima o valor do speed-up obtido se fosse implementado o paralelismo; identifica os pontos críticos e seleciona as melhores opções para melhor retorno no trabalho realizado. Intel Parallel Composer: Este aplicativo contém os compiladores C++ e Fortran, e as librarias usadas para criar códigos paralelos e otimizados. Intel Parallel Inspector: É um aplicativo que procura erros de paralelismo como os deadlocks, concorrência e erros de memória, tanto em programas seriais e paralelos, monitorando o comportamento do código em execução para depois mapear os erros à linha do código fonte. Intel VTune Amplifier: É uma ferramenta que proporciona informação sobre o rendimento de um código em aplicações seriais e multiprocesso. Analisa as opções do algoritmo e identifica onde e como a aplicação pode se beneficiar dos recursos de hardware disponíveis. O exemplo a seguir vai mostrar uma aplicação num código sequencial mostrando os resultados que o Intel Parallel Studio XE 2013, indicando os pontos críticos do programa e as sugestões para paralelização do código. EXEMPLO DE APLICAÇÃO Para apresentar algumas das potencialidades do Intel Parallel Studio XE 2013 será utilizado um programa teste que resolve o problema N-Queens. Este problema conceitualmente simples está baseado na existência de um tabuleiro quadrado com N linhas e N colunas, e o objetivo é colocar as N Rainhas (Queens) na borda do tabuleiro de tal forma que nenhuma das rainhas possa pegar as outras num movimento simples de um espaço. Por exemplo, para, tem-se um tabuleiro de posições, com 4 rainhas. Este problema tem duas soluções possíveis e uma é apresentada na Fig. 2. Fig. 2:Uma solução para o problema N-Queens

Uma característica deste problema é determinar o número de soluções que existem para um valor particular de N e o esforço computacional aumenta rapidamente segundo aumenta o valor de N. Na Fig. 3 pode-se observar que o resultado da análise realizada indicando todas as funções e loops que são potencialmente aptos a serem paralelizados. Fig. 3: Resultado apresentado pelo Intel Parallel Advisor Na Fig. 4 tem-se um resumo dos loops que o aplicativo identifica como potencialmente aptos para adicionar rotinas de paralelismo, mostrando o tempo de CPU consumido e a linha onde este loop se encontra. No topo deste resumo aparece a subrotina SOLVE com o maior tempo de CPU. Fig. 4: Resumo dos loops com maior tempo de processamento.

Na Fig. 5 é apresentado o resultado da análise realizado com o Intel Parallel Inspector, onde pode-se observar os erros de memória apresentados quando o programa N-Queens é rodado num computador com processador Intel Core i7 utilizando 8 núcleos. Fig. 5: Resultado da análise feita com o Intel Parallel Inspector. Finalmente o Intel VTune Amplifier mostra as funções que utilizam o maior tempo de processamento e a otimização destes códigos vai melhorar a performance do programa. Na Figura 6 pode-se observar um resumo do aplicativo. Fig. 6: Analise realizado com o Intel VTune Amplifier.

Fig. 7: Detalhe das funções com maior tempo de processamento. Na Fig. 7 pode-se observar novamente as funções com maior tempo de processamento além de informações referentes ao número de instruções que realiza a função, o tempo de CPU. Cada teste realizado envolve um conjunto de informações que por motivo de espaço e tempo não pode ser apresentado neste trabalho mas os resultados oferecem todos os parâmetros necessários para a realização de uma análise criteriosa e completa sobre os códigos que devem ser otimizados, paralelizados ou melhorado de forma a obter um programa que ofereça um rendimento próximo do ótimo. CONCLUSÕES Após o teste apresentado neste trabalho assim como outros realizados nos estudos sobre o software Intel Parallel Studio XE 2013 pode-se verificar que é uma ferramenta muito importante no desenvolvimento de programas que utilizem de forma eficiente os processadores multicore, hoje tão difundidos e em franca expansão no mercado. A versão comercial mais recente da família de processadores intel, o Intel Core i7 tem 6 MB de memória cache e pode utilizar até um máximo de 8 núcleos. Existem estudos no Instituto de Tecnologia de Massachusetts com processadores de 64 núcleos. Devido a este desenvolvimento de processadores cada vez mais poderosos, eficientes e com maior desempenho os aplicativos que façam uso desta tecnologia devem satisfazer a requisitos também de ser eficientes, de alto desempenho e econômicos. Tecnicamente o software Intel Parallel Studio XE 2013 foi uma fonte muito rica em informações

sobre os códigos que precisam de atenção, as funções, ou rotinas que são potencialmente paralelizáveis, assim como problemas no uso eficiente da memória. O pouco espaço disponível não permitiu apresentar todas as potencialidades do software mas de alguma forma permitiu mostrar os tópicos mais importantes que foram o objetivo desta pesquisa inicial. Os próximos passos são aplicar o software a um programa desenvolvido em linguagem de programação Fortran para resolver problemas da mecânica dos sólidos utilizando o Método dos Elementos de Contorno (Reyna, et al., 2009) aplicado a problemas da mecânica da fratura (Vera-Tudela e Telles, 2005). AGRADECIMENTOS Este trabalho é desenvolvido com o suporte da Fundação Carlos Chagas Filho de Amparo à Pesquisa do Estado do Rio de Janeiro (FAPERJ) através do Programa "Apoio às Instituições de Ensino e Pesquisa Sediadas no Estado do Rio de Janeiro 2012" REFERENCIAS Alecrim, E.; Cluster: conceito e características. Disponível em: <http://www.infowester.com/cluster.php>. Acesso em 07.07.2013. (2013) Aschermann, N e Roberto, P.; Arquitetura Multicore, Curso de Projeto de Sistemas Computacionais, Unicamp. (2007) Blair-Chappel, S and Stokes, A.; Parallel Programming with Intel Parallel Studio XE, John Wiley & Sons, USA. (2012) Brebbia, C.A., Telles, J.C.F. e Wrobel, L.C.; Boundary Elements Techniques: Theory and Application, Springer-Verlag, Berlin. (1984) Chapman, S.J.; Fortran 95/2003 for Scientists ans Engineers, 3 rd ed., Mc Graw Hill, USA. (2008) Intel; Intel Parallel Studio XE 2013: Resumo do Produto. Disponível em: <http://software.intel.com/en-us/sites/default/files/intel_parallel_studio_xe_2013_pb-br.pdf> Acesso em 11.07.2013. Reyna C.A., Telles, J.C.F, Barbosa, M. e Fonte Jr., E.F; Desenvolvimento de Software para a Resolução de Problemas da Mecânica dos Sólidos, 9º Congreso Interamericano de Computación Aplicada a la Industria de Procesos, Montevideo (Uruguay) (2009) Vera-Tudela, C.A.R e Telles, J.C.F.; A numerical Green s function and dual reciprocity BEM method to solve elastodynamic crack problems, Engineering Analysis with Boundary Elements: 29, 204-209 (2005).