top of page
Foto do escritorBeatriz Duque

A utilização da programação em C para otimizar programas em Python

Os testes a seguir foram realizados com os programas de modelagem de trânsito planetários desenvolvidos na pesquisa do projeto Stars and Exoplanets por Beatriz Duque, Felipe Pinho e Adriana Válio. Os programas podem ser baixados diretamente no site (aqui) ou no gitHub disponível na página.


A linguagem de programação C foi utilizada no momento de criação da classe estrela (estrela ()) e também na criação do eclipse (criaEclipse()) já que, para cálculos extensos e loops repetitivos, a linguagem apresenta melhores resultados quando comparada à linguagem de programação nativa dos programas, no caso, Python. Sendo assim, através da biblioteca Ctypes, códigos em C podem ser integrados em códigos Python, retornando o objeto necessário.


Análise de desempenho para a criação da estrela


Após a implementação da criação da estrela em um arquivo .C, temos uma grande melhoria de desempenho se comparado com os resultados da criação da estrela nativamente em Python. Além disso, o resulto ainda apresenta resultados mais satisfatórios quando, em C, é possível a utilização da biblioteca omp, que permite a paralelização de processos, fazendo com que o loop de criação e cálculo da matriz que compõe a estrela seja calculado de forma concorrente e não sequencial.

Na tabela abaixo, pode-se acompanhar esse desempenho através da métrica de tempo em segundo, totalizando 5 execuções para que a média de tempo fosse contabilizada com menores margens de erro.


Como primeiro exemplo, tem-se o ganho em tempo de 9,9 quando a estrela é criada em C e de aproximadamente 34,24 quando é criada de forma paralela, em relação à criação da mesma matriz em Python.

Dessa forma, para testar o contínuo ganho de tempo da técnica em maiores casos, foram realizados os testes em matrizes quadradas de tamanho 4280 e 8560, respectivamente, como pode se observar nas tabelas abaixo.


De acordo com os testes realizados para uma matriz de tamanho 4280 pixels, obteve-se o ganho de aproximadamente 50,39 vezes em relação à mesma criação da matriz quando realizada em Python.


Para a matriz de tamanho 8560 pixels, a criação da estrela em Python apresentou grande atraso nos resultados além de gerar resultados inesperados devido à dificuldade de alocação de memória em grandes cálculos decorrentes da estrutura da linguagem de programação em questão. Entretanto, observou-se que o mesmo problema não estava presente nos testes de criação da estrela em C, que contou com um ganho de 11 vezes no tempo de execução, sem apresentar erros, além de quando paralelizado, conta com o ganho de aproximadamente 52,93.

Dessa forma, observa-se que até para grandes casos há ganho no percentual de tempo quando é implementado no programa nativo Python, a criação da estrela através da linguagem de programação C. Além disso, a linguagem C de forma nativa permite que a compilação seja feita de forma a otimizar o desempenho do programa. Testes também foram realizados para que esses parâmetros de otimização fossem testados. Na tabela abaixo, pode-se observar os testes realizados com o parâmetro “O3”. Novamente, a métrica é o tempo levado para a criação da matriz estrela.


O parâmetro de otimização O3 aplicado no momento da compilação do arquivo C gera a matriz estrela com um ganho de aproximadamente 53,78 vezes em relação ao programa que gera a matriz estrela de forma nativa em Python. Dessa forma, nota-se grande ganho de desempenho ao utilizar os parâmetros nativos da linguagem C para a otimização do programa. Em um cenário onde o modelo matriz estrela pode ser gerado milhares de vezes, os ganhos percentuais apresentados se fazem de grande importância e interesse para os programadores que desejarem obter resultados com o programa.



Pesquisa realizada por:

  • Felipe Pereira Pinho

  • Beatriz Duque

101 visualizações

Posts recentes

Ver tudo

Комментарии


transito.png

Olá, que bom ver você por aqui!

Esse projeto foi desenvolvido com o intuito de facilitar a simulação da curva de Luz de uma Host Star orbitada por Exoplanetas. Leia nossos artigos para saber mais.

  • giticon
  • Twitter
bottom of page