Análise comparativa de desempenho computacional
Python puro versus otimizações com Numba em operações matemáticas intensivas
DOI:
https://doi.org/10.47385/tudoeciencia.2576.2025Palavras-chave:
Python. Numba. JIT. Paralelização. Benchmark. Computação Científica. Otimização de Performance.Resumo
Este estudo apresenta uma análise comparativa de desempenho entre Python puro e implementações otimizadas utilizando a biblioteca Numba para operações matemáticas intensivas. O objetivo foi avaliar os ganhos de performance obtidos através da compilação Just-In-Time (JIT) e paralelização automática em cálculos trigonométricos massivos. A metodologia consistiu na implementação de três versões de uma função que calcula a soma de senos e cossenos quadráticos: Python puro, Numba sequencial e Numba paralelo. Os testes foram executados em um array de 20 milhões de elementos utilizando operações trigonométricas para simular cargas computacionais intensivas. Os resultados demonstraram que a implementação com Numba sequencial obteve um speedup de aproximadamente 89x em relação ao Python puro, reduzindo o tempo de execução de 51,69 segundos para 0,58 segundos. Surpreendentemente, a versão paralela apresentou performance inferior à sequencial (1,31 segundos), evidenciando que nem sempre a paralelização resulta em melhorias de desempenho devido ao overhead de sincronização e características específicas da arquitetura computacional. Este estudo contribui para o entendimento das limitações e benefícios das diferentes abordagens de otimização em Python, fornecendo insights valiosos para desenvolvedores que trabalham com computação científica e análise de dados em larga escala.
Downloads
Referências
Amdahl, G. M. (1967). Validity of the single processor approach to achieving large scale computing capabilities. Proceedings of the April 18-20, 1967, spring joint computer conference (pp. 483-485). DOI: 10.1145/1465482.1465560. Acesso em: 17 ago. 2025.
Aycock, J. (2003). A brief history of just-in-time. ACM Computing Surveys, 35(2), 97-113. DOI: 10.1145/857076.857077. Disponível em: https://dl.acm.org/doi/10.1145/857076.857077. Acesso em: 17 ago. 2025.
Beazley, D. (2010). Understanding the Python GIL. PyCON Python Conference, Atlanta, Georgia. Disponível em: http://www.dabeaz.com/python/UnderstandingGIL.pdf. Acesso em: 17 ago. 2025.
Behnel, S., Bradshaw, R., Citro, C., Dalcin, L., Seljebotn, D. S., & Smith, K. (2011). Cython: The best of both worlds. Computing in Science & Engineering, 13(2), 31-39. DOI: 10.1109/MCSE.2010.118. Acesso em: 17 ago. 2025.
Dask Development Team. (2016). Dask: Library for dynamic task scheduling. Disponível em: https://dask.org. Acesso em: 17 ago. 2025.
Fleming, P. J., & Wallace, J. J. (1986). How not to lie with statistics: the correct way to summarize benchmark results. Communications of the ACM, 29(3), 218-221. DOI: 10.1145/5666.5673. Acesso em: 17 ago. 2025.
Gustafson, J. L. (1988). Reevaluating Amdahl's law. Communications of the ACM, 31(5), 532-533. DOI: 10.1145/42411.42415. Disponível em: https://dl.acm.org/doi/10.1145/42411.42415. Acesso em: 17 ago. 2025.
Harris, C. R., Millman, K. J., Van Der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., ... & Oliphant, T. E. (2020). Array programming with NumPy. Nature, 585(7825), 357-362. DOI: 10.1038/s41586-020-2649-2. Disponível em: https://www.nature.com/articles/s41586-020-2649-2. Acesso em: 17 ago. 2025.
Lam, S. K., Pitrou, A., & Seibert, S. (2015). Numba: A LLVM-based Python JIT compiler. Proceedings of the Second Workshop on the LLVM Compiler Infrastructure in HPC (pp. 1-6). DOI: 10.1145/2833157.2833162. Disponível em: https://dl.acm.org/doi/10.1145/2833157.2833162. Acesso em: 17 ago. 2025.
Lee, E. A. (2006). The problem with threads. Computer, 39(5), 33-42. DOI: 10.1109/MC.2006.180. Disponível em: https://ieeexplore.ieee.org/document/1631937. Acesso em: 17 ago. 2025.
Oppenheim, A. V., & Schafer, R. W. (2010). Discrete-time signal processing. 3rd ed. Upper Saddle River: Prentice Hall. ISBN: 978-0131988422.
Press, W. H., Teukolsky, S. A., Vetterling, W. T., & Flannery, B. P. (2007). Numerical recipes: The art of scientific computing. 3rd ed. New York: Cambridge University Press. ISBN: 978-0521880688.
Van Rossum, G., & Drake, F. L. (2009). Python 3 Reference Manual. Scotts Valley: CreateSpace. ISBN: 978-1441412690.
VIRTANEN, Pauli et al. SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature methods, v. 17, n. 3, p. 261-272, 2020.
Weicker, R. P. (1984). Dhrystone: a synthetic systems programming benchmark. Communications of the ACM, 27(10), 1013-1030. DOI: 10.1145/358274.358283. Disponível em: https://dl.acm.org/doi/10.1145/358274.358283. Acesso em: 17 ago. 2025.
Downloads
Publicado
Como Citar
Edição
Seção
Licença
Copyright (c) 2025 Tudo é Ciência: Congresso Brasileiro de Ciências e Saberes Multidisciplinares

Este trabalho está licenciado sob uma licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.