1. Impl 2. Impl 3. Impl 4. Impl Tempo (s) 29,75s 29,85s 168,77s 30,59s Acréscimo em relação a 1. 0,35% 467,36% 2,82% Tabela 5.1: Primeira abordagem
|
|
- Heloísa Borba Palmeira
- 5 Há anos
- Visualizações:
Transcrição
1 5 Aplicações Neste capítulo relatamos algumas experiências que realizamos com o LuaCharm. Em primeiro lugar, descrevemos implementações distintas de um problema clássico, para medir o impacto de desempenho de uso do modelo híbrido que propomos. Descrevemos também experiências de integração com o balanceamento de carga do Charm++ e com a carga dinâmica de código em um chare. Para a realização dos testes foi usado um cluster de computadores Pentium 400MHz, ligados por uma rede Ethernet 100Mbps e utilizando o sistema operacional Linux. 5.1 Testes de desempenho Para o teste de desempenho foi escolhido uma aplicação embaraçosamente paralela (25). Uma aplicação embaraçosamente paralela é constituída de tarefas independentes e sua paralelização é trivial uma vez que as tarefas tenham sido definidas, pois não é necessária comunicação alguma entre elas. Diversas classes de aplicações como soma vetorial, ray-tracing, computação branch-and-bound entre outras, caem nessa categoria. O problema utilizado nos testes de desempenho foi o da quadratura adaptativa (22), calculando a área da função e x no intervalo de 0 a 15 com uma tolerância de Para a implementação do problema, foram desenvolvidas duas abordagens diferentes. A primeira foi a implementação utilizando bolsa de tarefas (23), implementada por um chare, e consumidores de tarefas, implementados por um grupo, que mantém uma instância do tipo em cada processador. A segunda abordagem foi a criação de um array, onde cada elemento fica responsável por um pequeno pedaço do intervalo. A primeira abordagem sugerida exige um papel maior do controlador, responsável pela bolsa de tarefas, que deve enviar novas tarefas a chares que não estão em execução e deve receber tarefas dos chares quando elas forem subdivididas. Essa implementação dispensa o uso de um balanceador de carga, já que o controlador é o responsável por garantir que os chares estão sempre
2 Capítulo 5. Aplicações Impl 2. Impl 3. Impl 4. Impl Tempo (s) 29,75s 29,85s 168,77s 30,59s Acréscimo em relação a 1. 0,35% 467,36% 2,82% Tabela 5.1: Primeira abordagem ocupados com o cálculo de um intervalo da curva. Uma das vantagens da implementação do controlador em Lua, é a possibilidade de redefinir o funcionamento do controlador através da carga dinâmica de código. Apesar de não ter sido explorado nesse teste, a redefinição de qualquer método seria trivial pela interface disponível no binding. Essa característica é especialmente útil em aplicações com longo tempo de execução. A segunda implementação, por sua vez, demanda uma participação menor do controlador, que criará o array já com suas tarefas pré determinadas. Seu papel então será coletar os resultados dos elementos do array e terminar a execução quando todos enviarem os seus resultados. Para esta segunda solução é recomendável o uso de um balanceador de carga, pois o esforço do cálculo de cada intervalo não é uniforme e de acordo com a divisão dos chares entre processadores pode ocorrer uma sobrecarga de alguns deles. problema: Para cada abordagem, foram feitas quatro implementações diferentes do Implementação padrão em Charm++; Implementação do controlador em Lua e dos consumidores (primeira abordagem) e array (segunda abordagem) em C++; Implementação de ambos os chares em Lua; Implementação de ambos os chares em Lua, mas o código Lua utiliza uma biblioteca implementada em C para o processamento matemático. No apêndice A é mostrado o código dos testes feitos Primeira abordagem A primeira abordagem, utilizando um chare para bolsa de tarefas e um grupo para consumidores, foi testada no cluster utilizando oito processadores. O número inicial de tarefas (partições do intervalo) foi de 16, sendo que após o início do cálculo, mais tarefas são criadas dinamicamente pelos chares, através da subdivisão de um intervalo grande. Os resultados são apresentados na Tabela 5.1.
3 Capítulo 5. Aplicações Impl 2. Impl 3. Impl 4. Impl Tempo (s) 10,01s 10,01s 67,83s 10,01s Acréscimo em relação a 1. 0% 577,66% 0,03% Tabela 5.2: Segunda abordagem Segunda abordagem A segunda abordagem, utilizando um array de chares, onde cada um é responsável pelo cálculo de uma parte da aplicação, foi testada no cluster utilizando oito processadores. O número de elementos do array foi de 500. Os resultados são apresentados na Tabela 5.2. Como dito anteriormente, o balanceador de carga só atua nos chares que não estão em execução. Na nossa implementação, a iteração sobre o intervalo acontece recursivamente e a execução é iniciada através da chamada de um método do array global. Assim, quando o balanceador estivesse ativo, todos os chares já estariam em execução ou já teriam finalizado. Duas soluções foram propostas: a primeira seria a implementação de uma iteração sobre o intervalo na qual o método responsável pelo cálculo, no lugar de fazer uma recursão, salvasse o seu estado em uma variável global e chamasse o próximo passo da iteração através de uma chamada assíncrona para o próprio chare. A segunda possibilidade é que a execução dos intervalos seja feita em etapas, e, quando uma etapa for finalizada, a seguinte seja iniciada pelo coordenador. Para este teste escolhemos a segunda opção Discussão dos resultados Os resultados dos testes acima demonstram, como esperado, que o gargalo da aplicação está na parte de processamento matemático. Quando os chares foram totalmente implementados em Lua, tivemos resultados muito mais lentos que uma implementação totalmente em C, confirmando que as linguagens de script perdem muito em eficiência para linguagens compiladas tradicionais. Mas quando tivemos a parte de processamento matemático implementada em C, tanto através do uso de uma biblioteca carregada de Lua, quanto através da implementação do chare em C++, mas com o controlador em Lua, o resultado observado foi de uma perda de desempenho muito pequena. Podemos observar que os testes apresentam uma grande diferença no tempo de execução entre a primeira e a segunda abordagem. Essa diferença se dá pela maneira que o algoritmo foi implementado. Na primeira abordagem,
4 Capítulo 5. Aplicações 42 cada vez que um chare trabalhador busca uma tarefa, ele vai avaliar o tamanho do intervalo e particioná-lo caso ele seja muito grande. Uma das partições será calculada no próprio chare e a outra será enviada de volta para a bolsa de tarefas. Como o número iniciais de partições é pequeno, o número de mensagens entre os chares é muito grande, o que provoca um grande aumento no tempo de execução. Isso poderia ser melhorado com um particionamento melhor no início da execução. Como nestes testes a implementação ótima do algoritmo não é o nosso objetivo, mas sim a comparação entre as diferentes implementações, não abordamos este problema. 5.2 Integração com o balanceador de carga Conforme descrito anteriormente, arrays de chares têm uma forte integração com o balanceador de carga, podendo ser migrados de processador em qualquer momento que não estejam executando um método. Na seção anterior, implementamos uma aplicação que poderia sofrer ação do balanceador de carga, mas como não era necessário guardar dados entre os métodos, não foi preciso utilizar o mecanismo de migração de dados de Lua. Para que essa migração possa ser feita, o gerador de código implementa o método pup do array, que é chamado no chare antes e após a sua migração. O código gerado de pup é responsável por chamar as funções equivalentes em Lua para fazer a serialização e desserialização dos dados, que são pack e unpack. Para um array chamado Calc, o método pup seria o seguinte: void Calc::pup(PUP::er &p){ CBase_Calc::pup(p); // chama o pup do proxy int len; char* data; // Se está recuperando dados serializados if (p.isunpacking()){ // Busca a funç~ao Calc.unpack lua_getglobal(l, "Calc"); lua_pushstring(l, "unpack"); lua_gettable(l, -2); // Se Calc.unpack n~ao existir, retorna if (lua_isnil(l, -1)){ lua_pop(l, 2); return; // Pega valor da variável len
5 Capítulo 5. Aplicações 43 p len; data = new char[len]; // Pega string data de tamanho len p(data, len); lua_pushstring(l, data); // Coloca a string data na pilha // Chama Calc.unpack passando data como parametro lua_pcall(l, 1, 0, 0); lua_pop(l, 1); else if (!p.isunpacking()){ // Está serializando os dados // Busca a funç~ao Calc.pack lua_getglobal(l, "Calc"); lua_pushstring(l, "pack"); lua_gettable(l, -2); if (lua_isnil(l, -1)){ lua_pop(l, 2); return; // Chama Calc.pack esperando 1 resultado lua_pcall(l, 0, 1, 0); data = (char*) lua_tostring(l, -1); lua_pop(l, 1); len = strlen(data); // Exporta os dados das variávels len e data p len; p(data, len); O código acima é gerado no chare para realizar a serialização e desserialização dos dados do chare. Se a função pack estiver definida no chare, ela será chamada para a exportação dos dados de Lua. Os dados exportados são o tamanho da string de dados vinda de Lua e a própria string. Quando o chare é migrado e o método pup recebe os dados migrados, o chare recupera o tamanho da string e a string e se o método unpack estiver definido, ele é chamado recebendo a string como parâmetro. Suponhamos um chare que receba uma string em um método e a processe através de uma função local, que pode ter sido definida dinamicamente, e guarda o resultado do seu processamento até que um outro chare consulte o resultado. A sua interface seria: module Prog {
6 Capítulo 5. Aplicações 44 chare [lua "map.lua"] Map { entry [lua] Map(); entry [lua] void processstring(int size, char str[size]); entry [lua] void sendresult(); ; ; Após a migração, é importante que o chare mantenha o resultado do processamento das strings, e possivelmente que ele mantenha a implementação da função utilizada para o processamento, caso ela tenha sido definida dinamicamente, e não através do arquivo inicial map.lua. Para isso é necessário que os métodos pack e unpack sejam implementados. Abaixo apresentamos um exemplo de uma aplicação que exporta a implementação de uma função através da API de serialização de dados em Lua: Map = { -- A funç~ao Map.processString chama a funç~ao processfunction processstring = function(str) processfunction(str); end, sendresult = function() end, -- Funç~ao para serializar os dados pack = function() -- serializa a funç~ao local tfunc = debug.content(processfunction); -- Serializa os up values for key, value in pairs(tfunc.upvals) do tfunc.upvals[key]=debug.content(value) end -- Serializa dados de protótipo da funç~ao tfunc.p = debug.content(tfunc.p) -- funç~ao que tranforma a tabela tfunc em uma string return save("ffunc", tfunc) end, unpack = function(data) -- recupera os dados através da execuç~ao do conteúdo de data
7 Capítulo 5. Aplicações 45 loadstring(data)() -- recupera os dados serializados for key,value in pairs(ffunc.upvals) do ffunc.upvals[key] = debug.apply(value, upval ) end ffunc.p = debug.apply(ffunc.p, proto ) processfunction = debug.apply(ffunc, function ) end O código acima é um exemplo simplificado do uso da biblioteca de serialização de objetos em Lua para uma tabela. Essa biblioteca contém dois métodos principais: content, que transforma objetos Lua em tabelas (com protótipo e upvalues, no caso de existirem), e apply, que faz o contrário. Após serem transformados em tabelas, os objetos são convertidos para strings pela função save, que é descrita no livro Programming in Lua. save é uma função que transforma objetos em strings, tomando cuidado de lidar com referências circulares de tabelas. Após a serialização da função no método pack, a função é migrada e, no método unpack, é recuperada.
4 Binding entre Charm++ e Lua
4 Binding entre Charm++ e Lua Após o estudo do primeiro sistema, sobre a integração de Charm++ e Lua através do framework de troca de mensagens, e analisando os resultados e deficiências do binding, planejamos
Leia maisAlgoritmos e Estruturas de Dados I Linguagem C
Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()
Leia maisGuia del Laboratório 2 Desenho e Implementação de algoritmos paralelos Introdução
Guia del Laboratório 2 Desenho e Implementação de algoritmos paralelos Introdução Este laboratório tem como objetivo: Desenhar e implementar algoritmos paralelos. Desenvolvimento Em conferência pudemos
Leia maisBCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br
Leia maisRecursividade. Objetivos do módulo. O que é recursividade
Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade
Leia maisO Pronome MAIN 6.1. O Objeto Principal do Sistema
6 O Pronome MAIN Neste capítulo, é explorado o pronome MAIN. Na Seção 6.1, o conceito de objeto principal de sistema é explicado. Na Seção 6.2, são mostradas as transformações de código necessárias para
Leia mais04 Recursão SCC201/501 - Introdução à Ciência de Computação II
04 Recursão SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 04Recursão
Leia maisOrdenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I
Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande
Leia maisImplemente a função de remoção de uma chave na tabela hashing fechada em questão. void remover(tabela tabela, int n) {
Implemente a função de remoção de uma chave na tabela hashing fechada em questão. void remover(tabela tabela, int n) { } Tabelas de hash fechada: Exercício int posicao = buscar(tabela, n); if (posicao
Leia maisO Pronome CREATOR 4.1. O objeto criador do objeto corrente
4 O Pronome CREATOR Neste capítulo, é explorado o pronome CREATOR. Na Seção 4.1, a relação entre o objeto corrente e seu criador é explicada. Na Seção 4.2, são mostradas as transformações de código necessárias
Leia maisUniversidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Subprogramas Subprograma: programa que auxilia o programa principal na realização de uma determinada
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 9 Subalgoritmos, funções e passagem de parâmetros Profa. Marina Gomes marinagomes@unipampa.edu.br 22/06/2017 Engenharia de Computação - Unipampa 1 Modularização Facilita a
Leia maisPersistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe
Persistência alberto@ufs.br de Programação Departamento de Computação Universidade Federal de Sergipe Retrospectiva Quanto ao Tempo de Vida Variáveis Estáticas Variáveis Stack-Dinâmicas Variáveis Heap-Dinâmicas
Leia maisRecuperação P1 de Estrutura de Dados
Recuperação P1 de Estrutura de Dados Sigla _IED001_ TURMA: A PERÍODO: MAT ( ) NOT ( ) DISCIPLINA:_Estrutura de Dados DATA: / / Argumente com fundamentando as questões da avaliação indicando porque a questão
Leia maisMedida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo
Leia maisRevisão: Tipo Abstrato de Dados Recursividade
Algoritmos e Estrutura de Dados II Revisão: Tipo Abstrato de Dados Recursividade Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estudo das estruturas de dados envolve dois objetivos complementares:
Leia maisTabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou
Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou também denominada de tabela hashing com endereçamento aberto.
Leia maisALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal
ALGORITMOS AULA 01 Baseado nas aulas do Prof. Jorgiano Vidal LINGUAGEM C Uma das grandes vantagens do C é que ele possui tanto caracterìsticas de "alto nìvel" quanto de "baixo nìvel". Linguagem de propósito
Leia maisAlgoritmos e Estruturas de Dados II. Trabalho Prático 3
Algoritmos e Estruturas de Dados II Trabalho Prático 3 Entrega: 03/11/09 Devolução: 24/11/09 O trabalho pode ser feito em grupo de dois alunos. Este trabalho consiste em analisar o desempenho de diferentes
Leia mais3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.7. Funções 3.7.1. Introdução 3.7.2. Uso de
Leia maisO Pronome PARENT 5.1. O Objeto que Declarou o Objeto Corrente da Execução
5 O Pronome PARENT Neste capítulo, é explorado o pronome PARENT. Na Seção 5.1, a relação entre o objeto corrente e o objeto que o declarou é explicada. Na Seção 5.2, são mostradas as transformações de
Leia maisÁrvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich
Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic
Leia maisAED2 - Aula 11 Problema da separação e quicksort
AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos
Leia maisEstrutura de Dados Conceitos Iniciais
Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos Iniciais Aula 04 DPEE 08 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria
Leia maisApêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:
Apêndice A Classe Vector A classe Vector permite a representação de um vetor de dados de maneira similar à de um array, visto na disciplina Programação Orientada a Objetos I, mas com maior flexibilidade.
Leia maisLinguagem de Programação I. Aula 10 Funções
Linguagem de Programação I Aula 10 Funções Da Aula Anterior Tipos de dados básicos e operadores em C Declaração de variáveis e modificadores de tipo Estruturas de Controle Arrays unidimensionais Geração
Leia maisMedida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Medida do Tempo de Execução de um Programa Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo estudo
Leia maisAnálise de Algoritmos
Análise de Algoritmos Parte 1 Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 04 Algoritmos e Estruturas de Dados I Qual a diferença entre um algoritmo e um programa? Como escolher o algoritmo
Leia maisIntel Thread Building Blocks (TBB)
Intel Thread Building Blocks (TBB) MCZA020-13 - Programação Paralela Emilio Francesquini e.francesquini@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Disclaimer
Leia maisFundamentos de programação
Fundamentos de programação Recursividade Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno O que é recursividade? Técnica baseada em divisão e conquista Buscar solucionar o problema dividindo
Leia maisTabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I
Tabelas Hash Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa
Leia maisIntrodução à Ciência da Computação II. Recursão. Prof. Ricardo J. G. B. Campello
Introdução à Ciência da Computação II Recursão Prof. Ricardo J. G. B. Campello Agradecimentos Parte dos slides a seguir são adaptações dos originais em Pascal gentilmente cedidos pelo Prof. Rudinei Goularte
Leia maisSegundo trabalho prático de implementação Sistema de reserva de assentos
Segundo trabalho prático de implementação Sistema de reserva de assentos 1. Descrição do problema Computação Concorrente (MAB-117) 2016/2 Prof. Silvana Rossetto 1 DCC/IM/UFRJ 17 de novembro de 2016 Um
Leia maisPesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II
Pesquisa em memória primária: hashing Algoritmos e Estruturas de Dados II Hashing Algoritmos vistos efetuam comparações para localizar uma chave. Os registros armazenados em uma tabela são diretamente
Leia maisLINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.
LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado
Leia maisLINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.
LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado
Leia maisCapítulo 2. Charm++ 16
2 Charm++ O Charm++ é uma linguagem orientada a objetos para programação paralela baseada em C++ (34). Ela possui uma biblioteca de execução para suporte a computação paralela que se chama Kernel do Charm
Leia maisSCC Capítulo 2 Recursão
SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis
Leia maisPROCESSAMENTO PARALELO DE BIOSSEQÜÊNCIAS
PROCESSAMENTO PARALELO DE BIOSSEQÜÊNCIAS Aluno: Guilherme Lemos Mazie Orientador: Sérgio Lifschitz Introdução Durante os 12 meses de pesquisa foram realizados diversos pequenos projetos além da pesquisa
Leia mais3) A função de Fibonacci, F: N N, no conjunto dos naturais, é definida recursivamente por F(0) = 0, F(1) = 1, e F(n) = F(n-1) + F(n-2) para n > 1
1) Analise a(s) afirmativa(s) abaixo. Universidade Federal do Estado do Rio de Janeiro Processo Seletivo Discente Transferência Externa 009 Centro de Ciências Exatas e Tecnologia - CCET I) Correção - os
Leia maisCálculo da árvore binária de busca ótima usando MPI
Cálculo da árvore binária de busca ótima usando MPI 1. O Algoritmo Adriano Medeiros 1, André Murbach Maidl 1 1 Programação Concorrente/Paralela - PUC-Rio 1 adrimedeiros1@gmail.com, andremm@gmail.com O
Leia maisComputação II Orientação a Objetos
Computação II Orientação a Objetos Fabio Mascarenhas - 2016.2 http://www.dcc.ufrj.br/~fabiom/java Interfaces Uma interface é uma forma abstrata de descrever um objeto A classe fixa a forma de um objeto
Leia maisProgramação dinâmica
Programação dinâmica CLRS 15.2 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p. 1 Multiplicação iterada de matrizes Se A é p q e B é q r então AB é p r. (AB)[i,j]
Leia maisApêndice 1. Recomendações para testes de módulos
Recomendações para testes de módulos - 1 Apêndice 1. Recomendações para testes de módulos O presente conjunto de recomendações tem por objetivo definir um conjunto mínimo de critérios de seleção de casos
Leia maisESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2002/ Valores
ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA INTRODUÇÃO À PROGRAMAÇÃO (ENG. INFORMÁTICA) COMPUTADORES E PROGRAMAÇÃO I (ENG. ELECTROTÉCNICA) 2002/2003 TRABALHO PRÁTICO Nº
Leia maisCentro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional
Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional Disciplina: Algoritmos e Estruturas de Dados Professor: Flávio Cardeal Lista de
Leia maisValdex Santos. 09 de junho de 2011
Progamação Algébrica em Matlab Valdex Santos Instituto Federal da Bahia 09 de junho de 2011 Sumário 1 Introdução 2 MATLAB como linguagem de programação 3 Funções Matemáticas 4 IF, FOR e WHILE 5 outras
Leia maisSub Rotinas. Estrutura de Dados. Prof. Kleber Rezende
Sub Rotinas Estrutura de Dados Prof. Kleber Rezende Considerações Iniciais Uma dos métodos mais comuns e amplamente utilizados em programação de computadores é o Top-Down. Nesta abordagem um problema é
Leia maisAula 02: Custos de um algoritmo e funções de complexidade
MCTA028 Programação Estruturada Aula 02: Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 3Q-20106 1 Linguagem C: Tipos de dados 2 Linguagem C: Tipos
Leia maisFUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara
Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos
Leia maisIntrodução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)
Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 Lista Obrigatória 02 - Prof. Rafael Oliveira (Deve ser entregue em PDF via Moodle: Escolha apenas 5 exercícios para entrega) Exercício 01
Leia maisCOMPUTAÇÃO PARALELA E DISTRIBUÍDA
COMPUTAÇÃO PARALELA E DISTRIBUÍDA Aluno: Alessandro Faletti Orientadora: Noemi Rodriguez Introdução O objetivo inicial no projeto era aplicar a possibilidade de processamento em paralelo no sistema CSBase
Leia maisUma Proposta para Migração de Páginas Linux
Uma Proposta para Migração de Páginas Linux 1 - Introdução 2 - Gerencia de Memória em Sistemas Operacionais com Suporte a NUMA 2.1 O Gerente de Memória do Linux 2.2 Estratégias para Migração de Páginas
Leia maisTécnicas de projeto de algoritmos: Indução
Técnicas de projeto de algoritmos: Indução ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 08/2008
Leia maisCompiladores Ambiente de Execução
Compiladores Ambiente de Execução Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica
Leia maisRevisão. Profa Marina Gomes
Revisão Profa Marina Gomes Algoritmos Na construção de um programa, o problema que o algoritmo representa é composto por três fases. Entrada: dados de entrada do algoritmo. Processamento: ações sobre os
Leia maisArquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Desenvolvimento de Aplicações Paralelas
Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano Desenvolvimento de Aplicações Paralelas (gec.di.uminho.pt/lesi/ap10203/aula06aplicaçõespar.pdf) João Luís Ferreira Sobral Departamento
Leia maisExame Especial de Linguagens de Programação - DCC024 -
Exame Especial de Linguagens de Programação - DCC024 - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
Leia maisModelos de Execução Bolsas de Tarefas
Modelos de Execução Bolsas de Tarefas November 5, 2009 Modelos SPMD/MPI todos os processos executam o mesmo código quantidade de trabalho determinada estaticamente: tarefas pre-definidas quantidade de
Leia maisRecursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição
Recursividade Prof. Cesar Augusto Tacla Métodos iterativos Métodos iterativos utilizam estruturas de repetição For While Do while Normalmente, um método invoca outros métodos, não a si mesmo. 2 1 Recursividade
Leia mais5 Arquitetura de implementação
Arquitetura de implementação 103 5 Arquitetura de implementação 5.1 Visão geral Nossa arquitetura é caracterizada pela construção de um ambiente para execução de aplicações hipermídia definidas segundo
Leia maisPrimeira Prova de Linguagens de Programação - DCC024B -
Primeira Prova de Linguagens de Programação - DCC024B - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem
Leia maisBALANCEAMENTO DE CARGA EM SISTEMAS MULTIPROCESSADORES UTILIZANDO O MODELO DE PROGRAMAÇÃO CHARM++ 1
BALANCEAMENTO DE CARGA EM SISTEMAS MULTIPROCESSADORES UTILIZANDO O MODELO DE PROGRAMAÇÃO CHARM++ 1 Guilherme Henrique Schiefelbein Arruda 2, Edson Luiz Padoin 3. 1 Trabalho desenvolvido no contexto do
Leia maisMaterial baseado nos slides de: Marcos José Santana Regina Helena Carlucci Santana
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC643 Avaliaçãode Desempenhode Sistemas Computacionais Aula 5 Sarita Mazzini Bruschi
Leia maisProblema do Caminho Hamiltoniano
Universidade de São Paulo Escola de Artes, Ciências e Humanidades Bacharelado em Sistemas de Informação Introdução à Ciência da Computação II Professores Luciano Digiampietri e Fábio Nakano Data de entrega:
Leia maisPrimeira Parte do Trabalho Prático (Parte I) Valor: 40% Descrição do arquivo de dados
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Ciências de Computação Disciplina de Organização de Arquivos Profa. Dra. Cristina Dutra de Aguiar Ciferri PAE
Leia maisDESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES
DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES João Ricardo Kohler Abramoski (PAIC/FUNDAÇÃO ARAUCÁRIA), Sandra Mara Guse Scós Venske (Orientadora), e-mail: ssvenske@unicentro.br
Leia mais3 Ferramenta Proposta 3.1. Objetivos
3 Ferramenta Proposta 3.1. Objetivos O objetivo deste trabalho é a criação de um framework de testes que incorpore algumas das novas idéias encontradas na literatura. Sua principal característica deve
Leia maisFunções Finitas II: árvores AVL
Funções Finitas II: árvores AVL Métodos de Programação II 2004/2005 1 Objectivos Estender a biblioteca de árvores binárias para suportar Árvores AVL. 2 Motivação Pretende-se adaptar o programa apresentado
Leia maisRESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:
RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em: http://www.oxnar.com.br/aulas/java ATIVIDADE ELABORAR O PROGRAMA DE CÁLCULOS DE ÁREAS USANDO
Leia maisAlgoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência
Algoritmos e Estruturas de Dados LEE 2013/2014 Algoritmos de Ordenação Parte II Quicksort [1] Provavelmente o algoritmo mais usado inventado nos anos 60 muito estudado e analisado desempenho bem conhecido
Leia maisUNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação. Processamento Paralelo Threads. Aluno: Wagner Palacio
UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação Processamento Paralelo Threads Aluno: Wagner Palacio Turma: 3º período Professor: Giordano Cabral Recife, 29 de maio de 2012
Leia maisAula 13 Oficina de Programação Modularização. Profa. Elaine Faria UFU
Aula 13 Oficina de Programação Modularização Profa. Elaine Faria UFU - 2017 O que é modularização? No século XIX, Henry Ford, para baratear e massificar a montagem de carros, criou uma base modular. Esta
Leia maisLinguagem e Técnicas de Programação
Linguagem C Função Prof. Edwar Saliba Júnior Fevereiro de 2011 Unidade 07 Função 1 Conceitos As técnicas de programação dizem que, sempre que possível, evite códigos extensos, separando o mesmo em funções,
Leia maisAnalise o código abaixo:
Recursão - introdução Analise o código abaixo: 1 # include 2 # include 3 int Fatorial ( int x) 4 int k, s =1; for (k =0;k
Leia maisEstruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 4 Funções 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisThreads. Leonardo Gresta Paulino Murta
Threads Leonardo Gresta Paulino Murta leomurta@ic.uff.br Aula de hoje Estudaremos a execução em paralelo de programas em Java por meio de Threads Leonardo Murta Threads 2 Por que usar Threads? Threads
Leia maisUniversidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Linguagem C: funções Definição: blocos de código que podem ser chamados de dentro de um programa.
Leia maisIntrodução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.
Diagramas UML Classe, Seqüência e Atividades Marcio E. F. Maia Disciplina: Engenharia de Software Professora: Rossana M. C. Andrade Curso: Ciências da Computação Universidade Federal do Ceará 15 de maio
Leia maisFilas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013
Filas de prioridade Marcelo K. Albertini de Dezembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover
Leia maisENTENDENDO O FRAMEWORK FORK/JOIN DE JAVA
ENTENDENDO O FRAMEWORK FORK/JOIN DE JAVA Como funciona o Java Framework Fork /Join? Paralelismo é a execução simultânea de duas ou mais tarefas. Para nossos propósitos, basta entender que, em alguns problemas,
Leia maisJAVA. Professor: Bruno Toledo
JAVA Professor: Bruno Toledo Funcionamento de uma LP Em uma Linguagem de Programação (LP) como C e Pascal, temos o seguinte quadro quando vamos compilar um programa. Código fonte em c Teste.c Gera código
Leia maisRecursividade. Prof. Jesus José de Oliveira Neto
Recursividade Prof. Jesus José de Oliveira Neto Algoritmos podem ser definidos de duas formas: Forma iterativa ou não recursiva: utiliza laços de repetição (while, for, do/while) Forma recursiva: métodos
Leia maisSobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga
Algoritmos e Programação II Aula 3 Sobrecarga *Adaptado do material do Prof. Júlio Machado Sobrecarga Em várias linguagens é comum encontrarmos rotinas que fazem basicamente a mesma coisa, porém, com nomes
Leia maisO Pronome ALL 7.1. O Conjunto de Todos os Objetos do Sistema
7 O Pronome ALL Neste capítulo, é explorado o pronome ALL. Na Seção 7.1, o conjunto de todos os objetos do sistema é explicado. Na Seção 7.2, são mostradas as transformações de código necessárias para
Leia maisTeste de Software. Proj. Desenvolvimento de Software. Prof. Cleverton Hentz. 30 de agosto de Material Apresentado
Teste de Software Proj. Desenvolvimento de Software Prof. Cleverton Hentz cleverton.hentz@ifrn.edu.br 30 de agosto de 2017 Material Apresentado Sumário de Aula 1 Introdução 2 Níveis de Teste 3 Terminologia
Leia maisCapítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais
DCA-108 Sistemas Operacionais Capítulo 2 Luiz Affonso Guedes www.dca.ufrn.br/~affonso affonso@dca.ufrn.br Multiprogramação Luiz Affonso Guedes 1 Luiz Affonso Guedes 2 Conteúdo Caracterização de um SO Moderno
Leia maisFerramenta para Desenvolvimentode Sistemas EmbarcadosUtilizando Linguagem de Alto Nível p.1/25
Universidade Federal do Rio Grande do Sul Escola de Engenharia - Instituto de Informática Graduação em Engenharia de Computação Ferramenta para Desenvolvimento de Sistemas Embarcados Utilizando Linguagem
Leia maisRoberto Ierusalimschy
Roberto Ierusalimschy Mais uma linguagem de script alguma similariedade com Perl, Python, Tcl Uma linguagem de extensão estensível ênfase em comunicação inter-linguagens Personalidade própria: portabilidade
Leia maisProva de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins
Prova de Recuperação PMR21/PMR2 1o. semestre 2 Prof. Thiago Martins Instruções: screva o nome e o número USP na folha de papel almaço. 1. (2 pontos) Uma pilha é uma estrutura de dados na qual o elemento
Leia mais3. Vectores: Algoritmos de Pesquisa. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006)
3. Vectores: Algoritmos de Pesquisa João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog2-2006/2007 Introdução Algoritmo: conjunto
Leia maisProgramação Estruturada
Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada
Leia maisInterpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente
Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente 14 de Março de 2013 Nesta aula apresenta-se uma definição mais eficiente da semântica operacional da linguagem CALCI.
Leia maisConceitos Básicos de C
Conceitos Básicos de C Bibliografia Problem Solving & Program design in C, Jeri R. Hanly e Elliot B. Kpffman, 3 a edição Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 2 a edição, Addison-Wesley,
Leia maisAULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação MULTIPROCESSADORES
Leia maisALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão
Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 2.1 - Definições recursivas 2.2 - Como implementar recursividade 2.3 - Quando não usar recursividade 2.4 - Desenvolvendo algoritmos
Leia mais3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação
Leia maisTabelas Hash Endereçamento Direto
Tabelas Hash Endereçamento Direto ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 11/2008 Material
Leia maisÁrvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo
PMR2300 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó (exceto a
Leia mais