Juliano Benvenuto Piovezan. Desenvolvimento de uma Linguagem para Ensino de Programação Paralela

Documentos relacionados
INE5317 Linguagens Formais e Compiladores. Ricardo Azambuja Silveira INE-CTC-UFSC URL:

Linguagens e Compiladores

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

COMPILADORES PROGRAMA E BIBLIOGRAFIA

Concurso público de provas e títulos para professor adjunto

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

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

Sistemas Distribuídos

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO IM DCC CURSO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I 2010/2 PROGRAMA DA DISCIPLINA

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUÍDA

Ficha da Unidade Curricular

Arquitetura de Computadores

Curso de Programação Distribuída e Paralela 29/09/2008. Informática UFRGS. Sistemas Operacionais II (C. Geyer) Sincronização 1. Pg.

Linguagens Formais e Autômatos (BBC242) Professor: Anderson Almeida Ferreira DECOM-UFOP

Implementação da Especificação de Tempo Real Java para o EPOS

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

Teoria da Computação Prof. Lucília Figueiredo Prova 03 - ENTREGA DIA 24/06/2015. (a) Descreva o programa da MT usando um pseudocódigo.

Universidade Federal do RGS Instituto de Informática Departamento de Informática Aplicada

Teoria da Computação (BBC244)

Linguagens Formais e Autômatos. Tiago Alves de Oliveira

Projeto de Compiladores

Programação Concorrente

SSC0640 Sistemas Operacionais I

Universidade Federal do ABC Rua Santa Adélia, Bairro Bangu - Santo André - SP - Brasil CEP Telefone/Fax:

PARADIGMAS DE LINGUAGENS DE PROGRAMAÇÃO - PLP

Sistemas Operativos I

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

Computadores e Programação (DCC/UFRJ)

Ferramentas para Programação em Processadores Multi-Core

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular COMPILADORES Ano Lectivo 2017/2018

DISCIPLINA: ELE213 Programação de Sistemas de Tempo Real. Créditos: 4. Caráter: Eletiva. Professor Regente: Prof. Walter Fetter Lages

Paradigmas de Linguagens Computacionais (PLC) (Apresentação da disciplina)

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

What is? Eduardo Viola Nicola Disciplina de IPPD

Paradigmas de Computação

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Sistemas Distribuídos e Paralelos

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

Hardware. Organização Funcional de um. Computador. Arquitetura de Multiprocessadores. UCP Unidade Central de Processamento AMD. Sistema Central CPU

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

SO: SISTEMAS OPERACIONAIS Curso: Sistemas de Informação

Intel Thread Building Blocks (TBB)

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

Apresentação da disciplina. Programação em ambiente Linux prof: Taisy Silva Weber

SCC-5832 Teoria da Computação

ARQUITETURA DE COMPUTADORES

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA APLICADA

Ferramentas para Programação em Processadores Multi-Core

Síntese de programas utilizando a linguagem Alloy

Ruby e JRuby em... Paralelos e Distribuídos. Felipe Barden Lucas Fialho Zawacki

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

Paralelização do Método de Jacobi em Memória Compartilhada 1

USO DE PARALELISMO DE DADOS PARA MAIOR EFICIÊNCIA DE ALGORITMOS DE PROCESSAMENTO DE IMAGENS

UMA HIERARQUIA DE MEMÓRIA PARA UM MODELO RTL DO PROCESSADOR RISC-V SINTETISÁVEL EM FPGA

SISTEMAS DISTRIBUÍDOS

Uma proposta de implementação de árvores rubro-negras em Haskell de forma concorrente

Organização de Computadores Computação paralela; Sistema de entrada e saída (I/O); Suporte a Sistema operacional. Professor: Francisco Ary

MINISTÉRIO DA EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS DIRETORIA DE GRADUAÇÃO

Programação concorrente (processos e threads)

SSC510 Arquitetura de Computadores. 6ª aula

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

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

CP Compiladores I Prof. Msc.. Carlos de Salles

Arquitetura de Microprocessadores

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

SCC Introdução à Teoria da Computação

Arquitetura e Organização de Computadores

Programação Concorrente. Prof. Hugo Vieira Neto

Informática Aplicada. Introdução

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Parallel Computing Paradigms

HCT1 HISTÓRIA DA CIÊNCIA E TECNOLOGIA. Professor: Kleber Manrique Trevisani Aluno: João Jakybalis Neto

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1

Organização de Sistemas de Computadores

Universidade Federal de Roraima Departamento de Matemática Introdução à Ciência da Computação

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

PROGRAMA DE DISCIPLINA

Construção de Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

The future is parallel but it may not be easy

Universidade Federal do Rio de Janeiro Pós-Graduação em Informática. Introdução. Gabriel P. Silva. Gabriel P. Silva

Sistemas Distribuídos

Paradigmas de Linguagem de Programação. Aspectos Básicos

INE 5645 Programação Paralela e Distribuída. Prof. João Bosco M. Sobral INE-UFSC

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL FACULDADE DE INFORMÁTICA

Computadores não funcionam sem Sistemas Operacionais (SO); Diversas técnicas de programação, como programação paralela, surgiram nos SO;

SCC Teoria da Computação e Linguagens Formais

Ferramenta para Desenvolvimentode Sistemas EmbarcadosUtilizando Linguagem de Alto Nível p.1/25

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular COMPILADORES Ano Lectivo 2011/2012

PLANO DE APRENDIZAGEM

Brilliant Solutions for a Safe World

Licenciatura em Informática

SISTEMAS OPERACIONAIS

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018

Organização de Computadores Processadores. Professor: Francisco Ary

UM FRAMEWORK DE CONECTIVIDADE PARA APLICAÇÕES MÓVEIS EM JAVA ME

INE5318 Construção de Compiladores. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Transcrição:

Juliano Benvenuto Piovezan Desenvolvimento de uma Linguagem para Ensino de Programação Paralela Florianópolis 2008

Juliano Benvenuto Piovezan Desenvolvimento de uma Linguagem para Ensino de Programação Paralela Trabalho de Conclusão de Curso apresentado como requisito parcial para obtenção do grau de bacharel em Ciências da Computação. Orientador: José Mazzuco Júnior Co-orientador: Ricardo Azambuja Silveira Florianópolis 2008

Sumário 1 Introdução p. 4 1.1 Apresentação.................................. p. 4 1.2 Objetivos.................................... p. 5 1.2.1 Objetivo Geral............................. p. 5 1.2.2 Objetivos Específicos.......................... p. 5 2 Metodologia p. 6 2.1 Sumário Provisório............................... p. 6 2.1.1 Introdução............................... p. 6 2.1.2 Programação Concorrente....................... p. 6 2.1.3 Descrição da Linguagem........................ p. 6 2.1.4 Máquina Alvo............................. p. 7 2.1.5 Construção do Compilador....................... p. 7 2.1.6 Conclusão................................ p. 7 2.1.7 Anexos................................. p. 7 2.2 Identificação das Fontes............................. p. 7 3 Cronograma p. 9 3.1 Análise Léxica e Sintática........................... p. 9 3.2 Análise Semântica............................... p. 10 3.3 Gerador de Código............................... p. 10 3.4 Testes...................................... p. 10

3.5 Redação do Texto Científico.......................... p. 10 4 Conclusão p. 11 Referências Bibliográficas p. 12

4 1 Introdução 1.1 Apresentação No segundo trimestre de 2005 apareciam no mercado de desktops os primeiros processadores com múltiplos núcleos 1. Mais precisamente, o primeiro processador a aparecer no mercado para computadores pessoais com tal característica fora o Pentium D, fabricado pela Intel Corporation. Seguindo a tendência, a AMD (Advanced Micro Devices) lançaria, pouco tempo depois, sua versão com dois núcleos para o Athlon 64, o Athlon 64 X2. Desde então, novas tecnologias vêm sendo desenvolvidos, como a microarquitetura Intel Core, que apresentou avanços significativos, principalmente quanto ao número de núcleos e um melhor gerenciamento dos recursos, como a divisão da memória cache entre os núcleos. Com a expectativa da produção de chips com a tecnologia de 32 nm, podendo-se chegar a 22 nm até 2011, espera-se que o número de núcleos nos processadores cresça exponencialmente durante os próximos anos. De acordo com estudos do Forrester Research, espera-se processadores com 64 núcleos para servidores até 2009, e para computadores pessoais até 2012 [1]. A tecnologia com múltiplos núcleos surgiu como solução para o problema do aquecimento excessivo, enfrentado em decorrência da tentativa do aumento da freqüência. Estudos demonstraram que a freqüência máxima segura, para os processadores produzidos com a tecnologia de 65 nm, era de 4 Ghz, a qual fora alcançada na metade da década atual. Iniciava, então, uma nova corrida entre as fabricantes, não mais pelo aumento da freqüência, mas sim por uma solução para tal problema. O ponto chave da fabricação de processadores com múltiplos núcleos está na paralelização de processos, ou seja, execução de várias tarefas no mesmo instante de tempo. Nos processadores com único núcleo, a paralelização é feita atráves de software, pelo Sistema Operacional, através de algoritmos de escalonamento. Enquanto que, para os processadores de múltiplos núcleos, a paralelização é definida a nível de hardware, permitindo uma diminuição na freqüência sem perda de eficiência. 1 multi-core

5 Embora o mercado dos processadores com múltiplos núcleos tenha se firmado, um sério problema assola a indústria: a baixa taxa de utilização dos núcleos. Uma das causas para este fenômeno está no fato de que muitos programadores não conhecem os princípios básicos de programação paralela, continuando a produzir os programas de forma seqüêncial, sem fazer uso dos benefícios do paralelismo. Com isso, grandes empresas, como Intel e Microsoft, têm investido massissamente para capacitação de pessoas e também na criação de linguagens de programação que se adequem ao mundo paralelo. Em meados deste ano, as duas gigantes doaram, conjuntamente, 20 milhões de dólares, a serem divididos pela Universidade da Califórnia e pela Universidade de Illinois em pesquisas, como a criação de linguagens de programação que auxiliem a programação paralela [2]. A mesma Intel desenvolveu uma biblioteca denominada Threading Building Blocks (TBB), a qual visa isolar o programador de certos problemas que envolvem a programação paralela, como as incompatibilidades entre Sistemas Operacionais. Verifica-se, então, que a programação paralela possuirá um importante papel no desenvolvimento de sistemas computadorizados. Baseado nisso, esse trabalho terá como foco o desenvolvimento de uma linguagem a ser utilizado no ensino de conceitos básicos da programação concorrente. Servirá como base um trabalho já realizado por Alan Burns e Geoff Davies, que desenvolveram a linguagem conhecida como Pascal-FC, um subconjunto da conhecida linguagem Pascal, com adição de estruturas de sincronismo, como semáforos, monitores e variáveis de condição 2 [3]. 1.2 Objetivos 1.2.1 Objetivo Geral Este trabalho tem como objetivo o desenvolvimento de uma linguagem que permita o ensino de programação paralela. 1.2.2 Objetivos Específicos Criação de linguagem que permita a criação de execução concorrente; Inlcuir de estruturas de sincronização; Definir uma sintaxe simples, como as utilizadas por linguagens de script, exemplo Ruby; Tornar a linguagem multi plataforma. 2 condition variable

6 2 Metodologia 2.1 Sumário Provisório Pretende-se, no trabalho, dar uma visão geral sobre os benefícios da programação paralela, bem como os desafios a serem enfrentados, como sincronização de threads, condições de corrida, entre outros. Além de uma especificação formal das principais características da linguagem, uma visão geral sobre a Máquina Virtual JAVA, a qual será utilizada como máquina alvo para a linguagem. As próximas subseções demonstram a estruturação provisória do sumário. 2.1.1 Introdução Uma breve introdução sobre o assunto de programação concorrente, além de informações sobre o contexto no mercado atual. Como seções, serão apresentados os objetivos específicos e o objetivo geral. 2.1.2 Programação Concorrente Neste capítulo serão apresentados benefícios e dificuldades encontradas na utilização de paralelismo. Será discutido em profundidade o problema de condição de corrida, bem como as melhores soluções para tal. Além disso, problemas com deadlock será outro assunto abordado neste capítulo. 2.1.3 Descrição da Linguagem Toda a estrutura básica da linguagem será especificada neste capítulo. Incluindo declaração de variáveis, tipos básicos presentes e estruturas de controle. Será definido também o conceito de processo na linguagem, a ativação concorrente dos mesmos, entre outras especificações.

7 2.1.4 Máquina Alvo Neste capítulo será apresentado detalhes com relação à máquina virtual, para a qual o compilador irá gerar código. Será dada uma visão geral, como a estrutura básica da máquina, seu conjunto de instruções, além de outros detalhes. 2.1.5 Construção do Compilador A construção do compilador será detalhada nesta parte do trabalho. Aspectos como ferramentas utilizadas, tipo do analisador sintático utilizado, detalhes da implementação, entre outros. 2.1.6 Conclusão Neste capítulo serão apresentadas as conclusões referentes ao trabalho, bem como trabalhos futuros que poderão ser realizados com base neste trabalho. 2.1.7 Anexos Nos anexos será apresentado a especificação formal da linguagem, além de outros assuntos pertinentes. 2.2 Identificação das Fontes Após pesquisas com relação à bibliografia clássica nos assuntos relacionados a linguagens de programação, construção de compiladores e programação paralela, chegou-se a seguinte lista de referências: 1. HOARE, C. A. R. Monitors: An operating system structuring concept. Advanced Research Projects Agency, 1974. 2. FINKEL, R. A. Advanced Programming Language Design. [S.l.]: Addison-Wesley, 1996. 3. HOPCROFT, J. E.; MOTWANI, R.; ULLMAN, J. D. Introduction to Automata Theory, Language, and Computation. 2nd edition. ed. [S.l.]: Addison Wesley, 2001.

8 4. AHO, A. V.; SETHI, R.; ULLMAN, J. D. Compilers: Principles, Techniques and Tools. [S.l.]: Addison-Wesley Publishing, 1985. 5. TURBAK, F.; GIFFORD, D. Design Concepts in Programming Languages. [S.l.]: The MIT Press, 2008. 6. FRIEDMAN, D. P.; WAND, M. Essentials of Programming Languages. 3rd. ed. [S.l.]: The Mit Press, 2008. 7. HOARE, C. A. R. Hints on programming language design. Advanced Research Projects Agency, 1973. 8. LINDHOLM, T.; YELLIN, F. The Java Virtual Machine Specification. [S.l.]: Sun Microsystems, Inc., 1999. 9. TANENBAUM, A. S. Modern Operating Systems. 2nd edition. ed. [S.l.]: Person Education Inc., 2001. 10. PETERSON, J.; SILBERSCHATZ, A. Operating Systems Concepts. 7th edition. ed. [S.l.]: John Wiley & Sons, Inc., 2004. 11. DAVIES, G. Pascal-FC Language Reference Manual. 5th. ed. [S.l.], 1992. 12. FLANAGAN, D.; MATSUMOTO, Y. The Ruby Programming Language. [S.l.]: O Reilly, 2008.

9 3 Cronograma A tabela 4.1 apresenta o cronograma que deverá ser seguido durante do desenvolvimento do projeto. Os meses especificados se referem ao no de 2009. Cronograma Jan. Fev. Marc. Abr. Maio Jun. Jul. Ag. Set. Out. Nov. Implementação X Analisador Léxico Implementação X Analisador Sintático Implementação Analisador Semântico X X X Implementação X X X X X do Gerador de Código Testes X X X X X X X X X X Redação do X X X X X Texto Técnico Apresentação X Tabela 3.1: Cronograma 3.1 Análise Léxica e Sintática Uma vez que a implementação dos analisadores léxico e sintático é feita de forma automatizada, a implementação dos mesmos não tomará muito tempo. Com o tempo restante, tais analisadores passarão por uma bateria de testes, que será explicado mais adiante.

10 3.2 Análise Semântica A análise semântica é conhecida por ser a etapa mais complicada no projeto de compiladores. Com isso, deverá despender um maior tempo em sua implementação. Com isso estima-se uma duração de 3 meses para seu término. 3.3 Gerador de Código Estima-se que a geração de código ocupe 5 meses do tempo, considerando a possibilidade de ocorrência de problemas durante sua implementação. 3.4 Testes Seguindo o proposto pela programação extrema 1, especificamente no desenvolvimento orientado a testes - TDD, testes serão realizados durante todo o projeto. Segundo [4], TDD é uma técnica de projeto que garante que todo o código fonte foi completamente testado de forma unitária. Por conseqüência, a ocorrência de problemas diminui consideravelmente, e caso venha a ocorrer, novos testes devem ser definidos para cobrir o problema. 3.5 Redação do Texto Científico Espera-se produzir parte do texto científico no início do projeto, continuando após o início da implementação do gerador de código e finalizando o mesmo no último mês antes da apresentação. Uma vez que o tempo gasto na implementação dos analisadores léxico e sintático será mínimo, o primeiro mês proporcionará um tempo suficiente para redação de boa parte do texto. 1 XP - extreaming Programming

11 4 Conclusão Este trabalho teve como objetivo prover uma introdução ao trabalho a ser produzido como conclusão de curso. Fora apresentado o contexto atual e futuro em relação ao projeto, bem como seus objetivos gerais e específicos. As principais fontes de informação foram definidas, além de um sumário provisório. Por fim, fora apresentado o cronograma a ser seguido.

12 Referências Bibliográficas [1] STATEN, J.; RYMER, J. R. The multicore programming era is here. Forrester Research, 2008. [2] SERVICE, I. N. Microsoft e Intel investem US$ 20 milhões em computação paralela. Disponível em: <http://computerworld.uol.com.br/mercado/2008/03/28/microsoft-e-intelinvestem-us-20-milhoes-em-computacao-paralela/>. [3] DAVIES, G. Pascal-FC Language Reference Manual. 5th. ed. [S.l.], 1992. [4] AMBLER, S. Agile Database Techniques: Effective Strategies for the Agile Software Developer. [S.l.]: Wiley, 2003.