GithubHelp home page GithubHelp logo

pedromion / trabalho-final-programacao-concorrente Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 1.0 10 KB

Repositório criado para adicionar os códigos relativos ao trabalho final da disciplina programação concorrente

C 100.00%

trabalho-final-programacao-concorrente's Introduction

Regra de Simpson

Este projeto é uma implementação utilizando programação concorrente para a regra de Simpson, método utilizado para aproximar integrais definidas numericamente.

Sobre este projeto

Utilizando C, construímos duas versões da regra de Simpson: Uma sequencial e outra concorrente (utilizando a biblioteca pthreads), visando testar a diferença de tempo de execução das duas versões. A versão da regra utilizada neste projeto foi a mais simples, sem os mecanismos para correção de erros que versões mais potentes do método possuem, já que o foco do projeto é a concorrência. O algoritmo recebe uma função (que terá a integral aproximada), um limite inferior de integração, um limite superior de integração e a quantidade de iterações que deve realizar. Quanto maior a quantidade de iterações, menor se torna o erro, já que a aproximação (realizada através de parábolas) se torna cada vez mais específica, assim como na regra dos trapézios. Para funções polinomiais com grau maior do que 2, o algoritmo já não funciona tão corretamente, devido à dificuldade de aproximar funções mais complexas através de parábolas.

Sobre a implementação concorrente

Para a implementação concorrente, optamos por utilizar a mesma função sequencial, apenas com as mudanças para acrescentar o resultado local em uma variável resultado global, dividindo os intervalos de execução entre as threads. Assim, por exemplo, se integrarmos x com a = 0 e b = 20 e 4 threads, a primeira thread irá integrar utilizando a regra de Simpson normalmente entre 0 e 5, a segunda entre 5 e 10, a terceira entre 10 e 15 e a quarta entre 15 e 20. Ao final, somando tudo, teremos o resultado esperado. Isso pode ser feito porque a integração é entendida como a “área embaixo da curva”, e a área de uma região grande é a soma da área de suas regiões menores.

Além disso, tivemos grandes problemas com os pontos flutuantes. Ao multiplicar muitas vezes por números com pontos flutuantes, os erros se acumulavam, gerando resultados muito incorretos. Para mitigar isso, optamos por limitar os valores possíveis de n para a implementação concorrente através de um fator multiplicador par, para garantir que não teríamos dízimas ou valores muito estranhos ao calcular o tamanho do intervalo para as threads. Para descobrir a quantidade de iterações totais da versão concorrente, utlize a conta: fator multiplicador * (b - a)

Como utilizar

Sequencial

Clone o repositório ou faça download do arquivo separadamente.

Compile o arquivo utilizando o comando gcc SimpsonSequencial.c -o "nome que você deseja"

Execute o arquivo utilizando ."nome do arquivo" "limite inferior" "limite superior" "quantidade de iterações"

Concorrente

Clone o repositório ou faça download do arquivo separadamente.

Compile o arquivo utilizando o comando gcc SimpsonConcorrente.c -o "nome que você deseja"

Execute o arquivo utilizando ."nome do arquivo" "limite inferior" "limite superior" "número de threads" "fator multiplicador"

Importante

A função precisa ser alterada manualmente no código em ambos os casos, basta alterar o return da função funcao.

O fator multiplicador deve ser par, não nulo e positivo para que o funcionamento seja adequado

O código está inicialmente integrando a função f(x) = x

Para as versões que testam tempo, o processo é o mesmo, apenas alterando o nome do arquivo a ser compilado

Integrantes

Pedro Mion e Daniel Machado

Tecnologias

  • C
  • Biblioteca pthreads

trabalho-final-programacao-concorrente's People

Contributors

dmaxadu avatar pedromion avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

dmaxadu

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.