Uma Implementação e Avaliação de Programas Paralelos usando Python e Kotlin
Algoritmos Paralelos
Breno Klywer Olegario de Moura
UFERSA
Paulo Henrique Lopes Silva
UFERSA
Palavras-chave: Computação paralela, Programação Paralela, Computação de alto desempenho
Resumo
A computação paralela é essencial para maximizar o desempenho de processadores multicore modernos, tornando a escolha da linguagem de programação uma decisão crítica que impacta diretamente a eficiência. Python, apesar de sua popularidade, é fundamentalmente limitado pelo Global Interpreter Lock (GIL), um mecanismo que impede a execução simultânea de threads de bytecode, exigindo o uso de bibliotecas como multiprocessing para alcançar o paralelismo real em CPU. Em contraste, Kotlin, uma linguagem moderna sobre a Java Virtual Machine (JVM), oferece um modelo robusto e intuitivo através de corrotinas leves, que prometem alta performance com menor complexidade de gerenciamento. Este trabalho teve como objetivo principal implementar e avaliar o desempenho de programas paralelos em Python, Kotlin e C++, comparando suas funcionalidades e desempenho. O estudo buscou quantificar os trade-offs práticos entre os paradigmas de concorrência de cada linguagem—multiprocessamento em Python, corrotinas em Kotlin e threads nativas (std::async) em C++—através da implementação de algoritmos clássicos. A metodologia consistiu na implementação e avaliação de dois problemas computacionais: a Multiplicação de Matrizes (uma tarefa "embaraçosamente paralela") e a ordenação por Quicksort (uma tarefa recursiva de "dividir para conquistar"). Os testes foram executados em um ambiente de commodity controlado (CPU AMD Ryzen 5 5600G, 6 núcleos/12 threads, 16 GB RAM) utilizando C++17, Kotlin 2.0.0 e Python 3.13.3. O processo de benchmark incluiu 3 execuções de aquecimento (descartadas) seguidas de 7 medições independentes, cujos tempos médios de execução foram comparados para calcular o Speedup ($T_{\text{sequencial}} / T_{\text{paralelo}}$). Os resultados demonstraram trade-offs distintos dependendo da granularidade da tarefa. Para o Quicksort, com muitas tarefas curtas, o C++ foi a única linguagem a alcançar speedup (3.39x), enquanto o alto overhead de gerenciamento do Kotlin (Speedup 0.93x) e do Python (Speedup 0.97x) resultou em slowdown. Em contraste, na Multiplicação de Matrizes, uma tarefa intensiva em CPU, o Kotlin demonstrou excelente escalabilidade, atingindo um speedup de 5.82x. O Python, por sua vez, apresentou um slowdown drástico (Speedup 0.11x), indicando que o custo de serialização e Comunicação Inter-Processos (IPC) para contornar o GIL anulou os ganhos do paralelismo. Conclui-se que o C++ oferece o melhor desempenho absoluto, contanto que o overhead de threads seja gerenciado. O Kotlin emerge como uma alternativa robusta e produtiva, ideal para tarefas intensivas em CPU com granularidade maior. Por fim, as ferramentas padrão de paralelismo do Python (multiprocessing) mostraram-se inadequadas para tarefas de alta performance intensivas em CPU, invalidadas pelos gargalos do GIL e pelo custo proibitivo do IPC.