Desenvolvimento de Técnicas de Paralelização de Código



Documentos relacionados
LUIZ GUILHERME CASTILHO MARTINS DESENVOLVIMENTO DE TÉCNICAS DE PARALELIZAÇÃO DE CÓDIGO

UNIVERSIDADE FEDERAL DE SANTA CATARINA MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC

Push Technologies. Caixa Postal CEP Londrina PR Brasil.

LCAD. ALGORÍTMOS PARALELOS (Aula 6) Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES.

ENGENHARIA DE SOFTWARE I

Organização e Arquitetura de Computadores. Capítulo 13 Paralelismo no nível de instruções

FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO -

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

7 Processamento Paralelo

Microarquiteturas Avançadas

Organização de Computadores

Programação Concorrente Introdução

Dadas a base e a altura de um triangulo, determinar sua área.

Prof. Raul Sidnei Wazlawick UFSC-CTC-INE. Fonte: Análise e Projeto de Sistemas de Informação Orientados a Objetos, 2ª Edição, Elsevier, 2010.

Protocolo de comunicação para redes móveis aplicado ao trânsito

Arquitetura de Computadores I

Organização de Computadores

JSensor: Uma plataforma paralela e distribuída para simulações de redes de sensores

Organização e Arquitetura de Computadores I. de Computadores

Sistema de Computação

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas:

A importância do PDTI na implantação da Governança de TI nas Prefeituras Brasileiras

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Arquiteturas Multi e Many cores baseadas em redes-em-chip

Arquitetura de Computadores I

Caminho dos Dados e Atrasos

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

Oficina. Praça das Três Caixas d Água Porto Velho - RO

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

Programação Paralela e Distribuída (DCC/UFRJ)

Arquiteturas RISC. (Reduced Instructions Set Computers)

Computadores de Programação (MAB353)

Definindo melhor alguns conceitos

28/9/2010. Unidade de Controle Funcionamento e Implementação

Arquitetura de Computadores RISC x CISC. Gustavo Pinto Vilar

Aula 26: Arquiteturas RISC vs. CISC

FATEC Cruzeiro José da Silva. Ferramenta CRM como estratégia de negócios

Arquitetura de Computadores - Processadores Superescalares. por Helcio Wagner da Silva

Cálculo Aproximado do número PI utilizando Programação Paralela

Arquitetura de Computadores. Ivan Saraiva Silva

METODOLOGIA PARA ANÁLISE DE DESEMPENHO

Unidade 4 Paralelismo em Nível de Instrução. Filipe Moura de Lima Gutenberg Pessoa Botelho Neto Thiago Vinícius Freire de Araújo Ribeiro

Informática I. Aula 5. Aula 5-13/05/2006 1

Arquitetura e Organização de Computadores

Ferramentas para Simulação e Avaliação de Processadores. de Alto Desempenho

Metodologia Científica PROJETO DE PESQUISA

29/3/2011. Primeira unidade de execução (pipe U): unidade de processamento completa, capaz de processar qualquer instrução;

ANÁLISE DE DESEMPENHO DA PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PRIMOS UTILIZANDO PTHREAD E OPENMP 1

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS Os Programas de Avaliação

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Introdução ao Design

Uso da mineração de texto para detecção de usuários influentes no Facebook

Arquitecturas Alternativas. Pipelining Super-escalar VLIW IA-64

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

PESQUISA-AÇÃO DICIONÁRIO

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

FACULDADE DE TECNOLOGIA RUBENS LARA Análise e Desenvolvimento de Sistemas

Processos e Threads (partes I e II)

Dicionário da EAP - Software FarmaInfor

TRABALHO DE DIPLOMAÇÃO Regime Modular ORIENTAÇÕES SOBRE O ROTEIRO DO PROJETO FINAL DE SISTEMAS DE INFORMAÇÕES

TÍTULO DO PROJETO [colocar o título em caixa alta, Arial 14, centralizado, em negrito]

Arquitetura de processadores: RISC e CISC

ISO/IEC 12207: Gerência de Configuração

Sistemas Computacionais II Professor Frederico Sauer

CASE STUDY FOR RUNNING HPC APPLICATIONS IN PUBLIC CLOUDS

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Imagem retirada de documentações de treinamentos oficiais INTEL

CAPÍTULO 6 CIRCUITOS SEQUENCIAIS IV: PROJETO DE REDES SEQUENCIAIS

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

Sistema de Visão Computacional sobre Processadores com Arquitetura Multi Núcleos

Proposta de Trabalho para a Disciplina de Introdução à Engenharia de Computação PESQUISADOR DE ENERGIA

Monitoramento de Métricas de Segurança da Informação

Aumento da Capacidade de Armazenamento do SPRACE

Universidade Federal de Pernambuco

Desafio Profissional PÓS-GRADUAÇÃO Gestão de Projetos - Módulo C Prof. Me. Valter Castelhano de Oliveira

Implementação de um módulo simulador de robôs baseado em Unity3D para o SimBot - Simulador de Robôs para Lego NXT.

Engenharia de Sistemas Computacionais

ULA Sinais de Controle enviados pela UC

Comparativo de desempenho do Pervasive PSQL v11

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

IV PLANO DE GERENCIAMENTO DE TEMPO

Geração de código intermediário. Novembro 2006

ORGANIZAÇÃO CURRICULAR

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Feature-Driven Development

Administração de dados - Conceitos, técnicas, ferramentas e aplicações de Data Mining para gerar conhecimento a partir de bases de dados

O Crivo de Eratóstenes. Jones Albuquerque DFM-UFRPE. 2004, Recife - PE.

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Organização e Arquitetura de Computadores I

BW on HANA O Caso de Sucesso da Petrobras. Rodrigo José Panza Alves Heron V. O. e Silva Raquel Damasceno Franca Eliseo Bouzan Luciane Amorim

(P AA) 2 PACOTE DE APOIO A APRENDIZAGEM DE PROJETO E ANÁLISE DE ALGORITMOS: IMPLEMENTAÇÃO EM JAVA

Paralelização de Simuladores de Hardware Descritos em SystemC

Transcrição:

Desenvolvimento de Técnicas de Paralelização de Código Luiz Guilherme Castilho Martins 1, Wesley Attrot 1 1 Departamento de Computação Universidade Estadual de Londrina (UEL) Caixa Postal 10.011 CEP 86057-970 Londrina PR Brasil luizgui@gmail.com, wesley@uel.br Abstract. Code parallelization allows to the developer an oportunity to create algorithms to solve problems with more efficiency. A program is said to be parallel if it can have two or more action executing simultaneously in differents processing units. The goal of this work is studying parallelization techniques and try to develop a tecnique or optimization applied to code parallelization. Resumo. Paralelização de código permite ao programador a oportunidade de criar algoritmos para resolver problemas com maior eficiência. Programas são ditos paralelos quando existem duas ou mais ações executando simultaneamente em diferentes unidades de processamento. O objetivo deste trabalho é estudar técnicas de paralelização de código e tentar desenvolver uma nova otimização ou técnica de paralelização. 1. Introdução Diante da dificuldade de se melhorar processadores single-core devido ao alto consumo de energia e as altas temperaturas, a indústria de processadores adotou como solução à esses problemas, o desenvolvimento de processadores multi-core [11], além disso também considerou-se o poder de processamento quando se utilizam vários processadores single-core trabalhando simultaneamente, os quais oferecem grande desempenho, maior eficiência energética e menor custo [12]. Porém as aplicações desenvolvidas para a arquitetura single-core não utilizam-se do poder computacional dos processadores multicore. Para que as aplicações possam usufruir do alto desempenho que estes processadores oferecem, as aplicações devem ser divididas em múltiplas partes para que possam ser executadas em paralelo. A paralelização de código permite ao programador resolver problemas com maior eficiência, porém projetar e codificar um programa paralelo continua sendo uma tarefa difícil, uma vez que além de dividi-lo em pequenas tarefas, deve-se considerar a concorrência entre elas, as dependências de dados, entre outros fatores que dificultam o trabalho de paralelização [8]. O restante desse documento está organizado da seguinte forma: A seção 2, apresenta a fundamentação teórico-metodológica e o estado da arte; A seção 3, apresentam os objetivos do trabalho; A seção 4, apresentam os procedimento metodológios/métodos e técnicas que serão utilizadas no decorrer do trabalho; A seção 5, apresenta uma tabela descreve o cronograma do trabalho utilizando-se das atividades descritas na seção 4. 2. Fundamentação Teórico-Metodológica e Estado da Arte Na programação serial a ordem de execução do programa será a mesma em que a programação foi feita, mesmo que uma arquitetura multi-core seja utilizada. Um pro-

grama é dito paralelo quando o mesmo tem duas ou mais ações executando simultaneamente em diferentes unidades de processamento [1]. A paralelização de código, em geral, possui um fluxo de trabalho similar, partindose do entendimento do problema para que se possa identificar partes onde o paralelismo pode ser explorado, para então se definir uma estratégia para decomposição do mesmo, ou seja, definir como o problema será dividido, considerando-se as tarefas a serem executadas ou os dados que serão calculados. Uma vez que o problema foi decomposto, deve-se definir qual o modelo de programação paralela será aplicado, seja memória compartilhada ou por troca de mensagens [8]. 2.1. Decomposição O método de decomposição de programas paralelos é escolhido analisando-se qual a ênfase do problema a ser paralelizado, ou seja, dados ou tarefas. Em problemas onde tem-se paralelização de uma única tarefa sobre diferentes coleções de dados é utilizado o paralelismo de dados ou data parallelism. Como exemplo, na somatória de números de 1 a 100, pode-se dividir a tarefa entre a somatória de 1 a 50 e a somatória de 51 a 100 e posteriormente combinar os resultados. Em problemas onde há paralelização de diferentes tarefas sobre um conjunto qualquer de dados utiliza-se o paralelismo de tarefas ou task parallelism [3]. Como exemplo, tem se as tarefas do sistema operacional de atualizar a posição do mouse e atualizar o relógio, que podem ser executadas simultaneamente. 2.2. Pipeline Pipeline é uma técnica de que aumenta a quantidade de computações que serão realizadas por ciclo de clock da máquina. É uma técnica eficiente para aumentar o fluxo de tarefas por unidade de tempo. Pipeline funciona como uma linha de montagem, dividindo pequenas tarefas em tarefas ainda menores sendo seguro afirmar que serão finalizadas em menor tempo quando comparadas com a tarefa original [4]. 2.3. Dependência de dados A análise da dependência de dados em paralelização de código é crucial para que durante a execução de um algoritmo não sejam realizadas operações utilizando-se de dados incorretos devido à escritas ou leituras indevidas. Entre as técnicas utilizadas para análise e controle da dependência de dados está o grafo de dependência, garantindo a produção e consumo de dados de maneira correta [4]. Segundo [6] são três os tipos dependência de dados classificados como Load-Store: True dependence: dependência do tipo leitura depois da escrita ou Read After Write (RAW). Antidependence: dependência do tipo escrita depois da leitura ou Write After Read (WAR). Output dependence: dependência do tipo escrita depois da escrita ou Write After Write (WAW). Transformações podem ser feitas onde existem dependências de dados, uma vez que, o programa resultante da transformação seja equivalente ao programa inicial. A definição de equivalência diz que dois programas são equivalentes se com a mesma entrada ambos terão a mesma saída tendo sido executados na mesma ordem [6].

2.4. Vetorização Vetorização não se trata de uma técnica de paralelismo de código, mas sim uma otimização menos comum na literatura [2]. O processo de vetorização faz com que um algoritmo que trabalha com dois operandos por vez passe a processar um vetor, onde uma única instrução faz referência a todo um vetor [9]. Esta otimização é muito utilizada em reestruturação de loops. 2.5. Reestruturação de loops Os loops são responsáveis por grande custo computacional, assim, a reestruturação de loops é uma técnica muito importante em paralelização de código assim como é uma tarefa difícil [5]. Loops apresentam grande potencial para paralelismo e existem inúmeras técnicas para reestruturá-los, assim um dos obstáculos é identificar qual a melhor técnica para cada loop [10]. Entre as técnicas de reestruturação que serão estudadas durante o desenvolvimento deste trabalho estão: Loop Fusion, Loop Fission, Loop Reversal, Loop Interchanging e Loop Skewing [13]. 3. Objetivos O objetivo geral deste trabalho é a criação de uma técnica ou otimização nova de paralelização de código para processadores. Os objetivos específicos são: Desenvolver o conhecimento em programação paralela. Apresentar um teste comparativo utilizando benchmarks estabelecidos para computação paralela assim como o SPEC CPU 2006 e outros. 4. Procedimentos metodológicos/métodos e técnicas Os procedimentos metodológicos serão desenvolvidos com o intuito de alcançar os objetivos deste trabalho. Para isso serão exercidas as sequintes atividades: 1. Levantamento bibliográfico Levantamentos bibliográficos serão realizados durante todo o desenvolvimento desse projeto e servirão como base para sua elaboração. 2. Estudo detalhado de técnicas de programação paralela O estudo de técnicas de palelização de código como restruturação de loops, tratamento de dependência de dados, decomposição e vetorização serão analisadas. 3. Modelagem e implementação da técnica ou otimização a ser criada Nesta fase utilizando-se do conhecimento adquirido será criada e implementada uma técnica ou otimização para paralelização de código. 4. Testes e refinamento da técnica ou otimização criada Após a implementação serão realizados testes preliminares para identificar possíveis melhorias que podem aumentar a eficiência da técnica ou otimização criada. 5. Realização de testes comparativos utilizando benchmarks Segundo [8] speed-up é quanto um algoritmo paralelo é mais eficiente que um sequencial equivalente.

Utilizando o benchmark SPEC CPU 2006 e o compilador LLVM [7] serão realizados os testes finais na técnica ou otimização criada, então comparando os resultados obtidos com outras técnicas existentes. 6. Redação do TCC O Trabalho de Conclusão de Curso será redigido durante todo o desenvolvimento deste trabalho. 5. Cronograma de Execução Atividades: 1. Levantamento bibliográfico 2. Estudo detalhado de técnicas de programação paralela 3. Modelagem e implementação da técnica ou otimização a ser criada 4. Testes e refinamento da técnica ou otimização criada 5. Realização de testes comparativos utilizando benchmarks 6. Redação do TCC Tabela 1. Cronograma de Execução fev mar abr mai jun jul ago set out nov Atividade 1 X X X X X X X X X Atividade 2 X X X X X X X X X Atividade 3 X X X Atividade 4 X X X Atividade 5 X X X Atividade 6 X X X X X X X 6. Contribuições e/ou Resultados esperados Com esse trabalho espera-se uma grande contribuição para a formação acadêmica através da aquisição de experiência e conhecimento na área de programação paralela. Espera-se ao final desse trabalho obter uma técnica ou otimização que após os testes mostre resultados de desempenho superiores as técnicas ou otimizações existentes assim como torná-la disponível para que outros possam continuar o trabalho. 7. Espaço para assinaturas Londrina, 15 de Abril de 2013. Aluno Orientador

Referências [1] C. Breshears. The Art of Concurrency: A Thread Monkey s Guide to Writing Parallel Applications. O Reilly Media, 2009. [2] Neil G. Dickson, Kamran Karimi, and Firas Hamze. Importance of explicit vectorization for cpu and gpu software performance. Journal of Computational Physics, 230(13):5383 5398, 2011. [3] J.J. Dongarra, I. Foster, G.C. Fox, W. Gropp, K. Kennedy, L. Torczon, and A. White. Source Book of Parallel Computing. The Morgan Kaufmann Series in Computer Architecture and Design Series. Morgan Kaufmann, 2003. [4] F. Gebali. Algorithms and Parallel Computing. Wiley Series on Parallel and Distributed Computing. Wiley, 2011. [5] Tsung-Chuan Huang and Po-Hsueh Hsu. A practical run-time technique for exploiting loop-level parallelism. Journal of Systems and Software, 54(3):259 271, 2000. [6] Ken Kennedy and John R. Allen. Optimizing compilers for modern architectures: a dependence-based approach. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2002. [7] Chris Lattner. Introduction to the llvm compiler system. Advanced Computing and Analysis Techniques in Physics Research, 2008. [8] P. Pacheco. An Introduction to Parallel Programming. An Introduction to Parallel Programming. Elsevier Science, 2011. [9] Chuck. Piper. An introduction to vectorization with the intel R c++ compiler. 2011. [10] J.C. Quill, P. Milligan, and R.K. McConnell. A knowledge based approach to loop restructuring. Microprocessing and Microprogramming, 40:773 776, 1994. [11] M. Aater Suleman, Moinuddin K. Qureshi, and Yale N. Patt. Feedback-driven threading: power-efficient and high-performance execution of multi-threaded workloads on cmps. SIGARCH Comput. Archit. News, 36(1):277 286, March 2008. [12] M. Wehner, L. Oliker, and J. Shalf. A real cloud computer. Spectrum, IEEE, 46(10):24 29, 2009. [13] M.J. Wolfe. High Performance Compilers for Parallel Computing. ADDISON WESLEY Publishing Company Incorporated, 1996.