Giter VIP home page Giter VIP logo

taller_cython_cp's Introduction


Práctica en Cython
Autor: Juan Pablo Barrios Suarez - 8º semestre
Asignatura: Computación Paralela y Distribuída
Docente: John Corredor
Fecha: 1/11/2022
Ciencias de la computación e inteligencia artificial

En este repositorio se encuentran los ficheros correspondientes a la solución del problema planteado acerca de las orbitas de los planetas.

Introducción

Para esta práctica se considera pertinente hablar sobre el lenguaje de programación Cython. Este es un lenguaje de programación diseñado para usar la sintaxis de Python y a su vez que pueda implementar métodos y estrategias de programación utilizadas en C y C++, por lo que un código realizado en este lenguaje contaría con beneficios de rendimiento como se observan en C y C++.

En otros términos, un programa escrito en este lenguaje contendría la sintaxis de Python, solo que, con ciertas correcciones en las declaraciones de variables y funciones, y sería compilado a código de C o C++

Objetivo

Analizar los resultados obtenidos de la ejecución de un programa construido en Cython y Python, comparando el rendimiento que ofrece cada uno de los lenguajes de programación mencionados previamente, del cual se espera que Cython ofrezca una mejora en los tiempos de ejecucion debido a la combinación de Python con C/C++.

Ejercicio: Medida de rendimiento en Python/Cython para el problema de Planeta en Orbita

Esta práctica consta de la construcción de cinco ficheros de extensión .pyx, .py y un archivo de automatización MakeFile. A partir de estos ficheros se busca realizar una comparativa del rendimiento que puede ofrecer la ejecución de este programa en el lenguaje de programación Python, y como se puede obtener una mejora en el rendimiento al ser implementado en el lenguaje de programación Cython. Al final, lo que se obtendra en cada ejecución tanto para Python como para Cython, es un fichero .csv que contiene los tiempos de ejecución para los dos lenguajes realizados en una misma iteración. Con base en esos resultados, se realizará una comparativa del programa implementado en ambos lenguajes.

Los archivos que se encuentran dentro del repositorio en GitHub (Click aqui para acceder) son los siguientes:

orbita_py.py

En este programa encontrará la solución propuesta dentro del lenguaje de programación python.

orbita_cy.pyx

En este programa encontrará la solución propuesta dentro del lenguaje de programación cython. A nivel de comparación podrá observar que será la misma solución escrita en python, con una pequeña diferencia en la sintáxis.

setup.py

El setup es un programa que permite realizar la compilación del archivo .pyx a código C. Se divide el setup del código principal para trabajar bajo las buenas prácticas que se aplican con la compilación por separado.

principal.py

Este programa realiza la ejecución de los dos programas que contienen la solución. Para esto, este programa escrito en Python implementará ambos programas como bibliotecas y de este modo accede a sus métodos. Posteriormente, toma el tiempo de ejecución para ambos programas por separado, y termina contrastando los rendimientos obtenidos por ambos programas.

Makefile

Este programa automatiza el proceso de compilación y creación del recurso compartido del archivo .pyx.

Resultados

Para presentar los resultados obtenidos en las pruebas de ejecución, es necesario hacer uso de los módulos de Pandas y Matplotlib, ya que estos permitiran visualizar los datos de manera más sencilla. Para poder visualizarlos, se recomienda acceder al fichero .ipynb donde se encuentra todo un análisis exhaustivo de los datos obtenidos. Tambien puede acceder a través de este enlace: (Click aqui)

Conclusiones

De la práctica, se puede concluir lo siguiente:

  1. El lenguaje de programación Cython, a pesar de ser similar a Python, puede llegar a ofrecer un mejor rendimiento con respecto a la ejecución de determinado programa debido a que este permite la utilización de módulos y variables del lenguaje de programación C.
  1. Se crea un repositorio que contiene los ficheros necesarios para que cualquier usuario que desee replicar esta práctica pueda hacerlo de manera rápida y sencilla. De igual forma, en el repositorio se encuentran las instrucciones necesarias para conseguir la ejecución del programa
  1. Del gráfico de barras se pudo observar que hay una mejora considerable en los tiempos de ejecución en el lenguaje de programación Cython con respecto a Python. En Python se obtuvo un promedio de $1.93$s, mientras que en Cython se obtuvo un promedio de $0.11$s, lo cual indica que Cython es aproximadamente $17$ veces mejor que Python para la ejecución de este programa
  1. Del gráfico de lineas en el que se comparó Python con respecto a Cython, se puede observar que la escala en la que se encuentran los tiempos de ambos programas, genera que la curva de Cython se vea como una línea recta, mientras que en la de Python si se pueden observar unas pequeñas fluctuaciones en los tiempos. Es por ello que se realiza la gráfica individual para cada lenguaje, lo cual permite apreciar de mejor manera los tiempos de ejecucíon. Para Python se puede observar una fluctuación mayor en los tiempos, oscilando entre $1.88$s y $2.00$, mientras que en Cython se ve un comportamiento extraño, ya que en cierto tramo de la curva se comporta de manera constante, sin embargo sigue fluctuando a medida que avanzan las iteraciones. Esto se debe a que el nodo computacional no se aisló al momento de realizar las pruebas, por lo que los datos pudieron haberse contaminado.
  1. Con base en lo mencionado anteriormente, se recomienda que si se quiere replicar este experimento, en lo posible se aísle el nodo computacional que vaya a realizar la correspondiente ejecución, con el fin de obtener una mejor calidad en los resultados y asi poder realizar un análisis más completo, que muestre el comportamiento real de los dos lenguajes.
  1. Por último, se recomienda que, como se está trabajando con Cython, y este a su vez tiene acceso a los módulos y variables del lenguaje de programación C, a través de la instrucción nogil se pueda dar ese acceso al uso de OpenMP para introducir el paralelismo y poder obtener una mejora en los tiempos de ejecución.

Ejecucíón

  • Para poder ejecutar la aplicación, deben ejecutarse los siguientes comandos:
python setup.py build_ext --inplace
  • Finalmente, se ejecuta el módulo principal:
python principal.py

taller_cython_cp's People

Contributors

juanpablobarrios30 avatar

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.