A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral.

Apresentações semelhantes


Apresentação em tema: "A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral."— Transcrição da apresentação:

1 A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral a eficiência de um programa é uma função de seus dados de entrada, ou seja, normalmente o tempo de execução de um programa cresce conforme cresce o tamanho, ou a quantidade, dos dados com os quais o programa é alimentado. Entrada SaídaPrograma Introdução Um exemplo de programa de computador Seja a função power(n, x) que calcula o valor de x n. Esta função poderia ser representada por um programa Power com a seguinte forma: n, x xn xn Power Caso fossemos analisar o código do programa Power, este seria mais ou menos assim: n = valor de n lido da entrada; x = valor de x lido da entrada; p = 1; enquanto n > 0 faça p = p * x; n = n - 1; Resultado = p; Esta seqüência finita de passos é denominada o algoritmo de Power. Um Programa Especializado O programa Power está preparado para receber pares de inteiros positivos como dados de entrada. Caso este programa fosse menos flexível, isto é, caso o algoritmo de Power fosse elaborado conhecendo-se um dos valores de entrada, poderia o programa ser mais eficiente? A fim de responder a esta questão, observe uma versão especializada do algoritmo de Power, elaborada para um valor de n sempre igual a 5. Este algoritmo será denominado Power5. x = valor de x lido da entrada; p = 1; p = p * x; Resposta = p; Observe que a variável n não mais aparece no texto do algoritmo de Power5. Como não mais ocorrem testes de parada ou operações aritméticas sobre a variável n, conclui-se que o algoritmo de Power5 é mais eficiente que o algoritmo de Power. Diz-se que Power5 é uma versão de Power especializada com relação a uma parte de sua entrada, neste caso o valor n do expoente da operação x n. Este resultado não é uma coincidência, pois em geral programas especializados com relação a uma parte de sua entrada de dados são mais eficientes que os programas que lhes deram origem. Definição de Avaliação Parcial de Programas A técnica de obtenção de programas especializados a partir de programas não especializados, com relação à parte da entrada de dados destes últimos, é chamada Avaliação Parcial de Progra- mas. A palavra Avaliação é utilizada porque, para que um progra- ma possa ser especializado, o seu algoritmo precisa ser avaliado a fim de que as computações que dependam somente da parte co- nhecida da entrada possam ser previamente realizadas. E esta ava- liação é Parcial porque o código de um programa não é avaliado com relação a todos os seus dados de entrada, mas apenas com base em parte deles. O objetivo principal da avaliação parcial é o ganho em eficiência. Se parte dos dados de entrada de um programa é co- nhecida, as estruturas do programa que dependam apenas dessa parte podem ser previamente computadas. O programa especiali- zado conterá apenas o código necessário para processar os dados ainda não conhecidos. Nomenclatura A parte da entrada de um programa conhecida, que será utilizada durante a Avaliação Parcial é denominada Entrada Estática, ao passo que a parte desconhecida é chamada Entrada Dinâmica. Um Avaliador Parcial é um programa que executa Avaliação Parcial de Programas automaticamente. Um Avalia- dor Parcial recebe como entrada o código de um programa, ou seja, a descrição de seu algoritmo, escrita em uma linguagem de programação, e a entrada estática daquele programa. A saída de um Avaliador Parcial é constituída pelo código especializado obtido a partir do programa de entrada e dos dados estáticos: Código de um Programa Entrada Estática Avaliador Parcial Programa especializado com relação à Entrada Estática A Avaliação Parcial de Programas tem diversas aplicações práticas relacionadas à otimização de programas de computador. Esta técnica é também muito importante em estudos acerca de compilação e geração de compiladores. No restante desta apresentação serão mostrados os resulta- dos conseguidos com a Avaliação Parcial de alguns programas bem conhecidos entre os matemáticos e cientistas da computação. O Avaliador Parcial utilizado chama-se CMIX/II e foi implemen- tado na linguagem C por pesquisadores Dinamarqueses. Avaliação Parcial de Programas Universidade Federal de Minas Gerais Departamento de Ciência da Computação Laboratório de Linguagens de Programação Autor: Fernando M. Q. Pereira Coordenadores: Roberto S. Bigonha, Mariza A. S. Bigonha, Vladimir Oliveira de Iorio

2 Exemplos de Aplicação Avaliação Parcial de Programas As técnicas de Avaliação Parcial de Programas possuem diversas aplicações, algumas teóricas, outras práticas. Neste material são mostradas duas das principais aplicações das técnicas de Avaliação Parcial: Otimização de Programas. Geração de Compiladores. Otimização de Programas. Otimizar um programa significa melhorar o seu desempenho, seja reduzindo o seu tempo de execução ou os recursos que este programa exige do computador para que possa ser usado. A Avaliação Parcial de um programa muitas vezes permite reduzir o seu tempo de execução na medida em que uma parte do processamento deste programa é realizada durante sua especialização. Neste caso, a Avaliação Parcial é proveitosa quando: T e = Tempo de especialização do programa. T r = Tempo de execução do programa residual (especializado). T o = Tempo de execução do programa original (não especializado). n = Número de execuções dos programas original e especializado. Otimizando um algoritmo de interpolação Dada uma tabela de pontos (pares de abscissas e ordenadas), um algoritmo interpolador permite conhecer valores de pontos que não constam naquela tabela. Tal algoritmo geralmente encontra valores intermediários a partir de polinômios que contenham todos os pontos conhecidos da tabela, a partir dos quais as quantidades desconhecidas podem ser inferidas. Algoritmo de Lagrange: Abaixo segue um exemplo de algoritmo de interpolação. Este algoritmo é conhecido como algoritmo de Lagrange, onde x[i] representa a i-ésima abscissa da tabela, y[i] representa a i-ésima ordenada da tabela, m representa o tamanho da tabela e z representa o abscissa que deve ser interpolada: números inteiros: i, j; números reais: p  0, r  0; Para i de 0 até m faça p  y[i]; Para j de 0 até m faça se i  j então p  p  ((z-x[j])/(x[i]-x[j])); r  r + p; Resposta = r; Algoritmo de Lagrange especializado Este algoritmo foi gerado automaticamente por um Avaliador Parcial a partir do algoritmo mostrado no quadro anterior. números reais: p  0, r  0; p  y[0]; p  p  ((z-x[1])/(x[0]-x[1])); r  r + p; p  y[1]; p  p  ((z-x[1])/(x[0]-x[1])); r  r + p; Resposta = r; Análise de desempenho A versão especializada do algoritmo de Lagrange é quase duas vezes mais rápida que a versão original, conforme resultados obtidos via simulação. Na tabela de resultados, a coluna Erro contém a diferença percentual entre os resultados previstos e apurados de fato. Geração de Interpretadores e de Compiladores. Pode ser demonstrado que é possível gerar interpretadores e compiladores via Avaliação Parcial. Um interpretador recebe um programa qualquer e a entrada de dados desse programa e simula a execução deste programa sobre a entrada. Um compilador é um programa que traduz algoritmos escritos em alguma linguagem de programação para um formato que pode ser executado em algum computador. Um interpretador padrão Programa Fonte Entrada de Dados Resultado da Execução Interpretador de Programas Um interpretador obtido via Avaliação Parcial Avaliador Parcial Resultado da Execução Programa Fonte Interpretador de Programas Entrada de Dados Programa Compilado Um Compilador Padrão Programa Compilado Programa Fonte Resultado da Execução Entrada de Dados Compilador de Programas


Carregar ppt "A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral."

Apresentações semelhantes


Anúncios Google