in

¿Qué tan rápido es C ++ comparado con Python?

PROGRAMACIÓN

¿Qué tan rápido es C ++ comparado con Python?

Un ejemplo para los científicos de datos que creen que no necesitan saber C ++

Naser Tamimi

16 de diciembre de 2020·4 min de lectura

Foto de Saffu en Unsplash

Hay millones de razones para amar Python (especialmente para los científicos de datos). Pero, ¿en qué se diferencia Python de los lenguajes de programación de bajo nivel más profesionales como C o C ++? Supongo que esta es una pregunta que muchos científicos de datos o usuarios de Python se preguntaron o se harán algún día. Existen muchas diferencias entre Python y lenguajes como C ++. Para este artículo, le mostraré qué tan rápido se compara C ++ con Python con un ejemplo súper simple.

1* ttbjLpp9HMrpWdzSPckZQ

Foto del autor.

Para mostrar la diferencia, Decidí ir con una tarea simple y práctica en lugar de una tarea imaginaria. La tarea que voy a realizar es generar todos los k-mers de ADN posibles para un valor fijo de «k». Si no sabe acerca de los k-mers del ADN, lo explico en un lenguaje sencillo en la siguiente sección. Elegí este ejemplo porque muchas tareas de análisis y procesamiento de datos relacionados con la genómica (por ejemplo, generación de k-mers) se consideran computacionalmente intensivas. Esa es una razón por la que muchos científicos de datos en el campo de la bioinformática están interesados ​​en C ++ (además de Python).

1*weq5H J1thd04rYleC2uSA

Foto del autor.

NOTA IMPORTANTE: El objetivo de este artículo no es comparar C ++ y Python de la manera más eficiente. Ambos códigos podrían escribirse de una manera más eficiente y utilizando enfoques mucho mejores. El único objetivo de este artículo es comparar estos dos lenguajes cuando están siguiendo exactamente el mismo algoritmo e instrucciones.

Una breve introducción a los K-mers de ADN

Un ADN es una larga cadena de unidades llamadas nucleótidos. En el ADN, hay 4 tipos de nucleótidos que se muestran con las letras A, C, G y T. Los humanos (o más precisamente Homo Sapiens) tienen 3 mil millones de pares de nucleótidos. Por ejemplo, una pequeña porción de ADN humano podría ser algo como: ACTAGGGATCATGAAGATAATGTTGGTGTTTGTATGGTTTTCAGACAATT

En este ejemplo, si elige 4 nucleótidos consecutivos (es decir, letras) de esta cadena, será un k-mer con una longitud de 4 (lo llamamos 4-mer). A continuación se muestran algunos ejemplos de 4-meros derivados del ejemplo.

ACTA, CTAG, TAGG, AGGG, GGGAetc.

El reto

Para este artículo, generemos todos los 13-mers posibles. Matemáticamente es una permutación con un problema de reemplazo. Por lo tanto, tenemos 4¹³ (= 67,108,864) posibles 13-mers. Utilizo un algoritmo simple para generar resultados en C ++ y Python. Echemos un vistazo a las soluciones y comparándolas.

Comparación de soluciones

Para comparar fácilmente C ++ y Python para este desafío específico, utilicé exactamente el mismo algoritmo para ambos lenguajes. Ambos códigos están diseñados intencionalmente para ser simples y similares. Evité el uso de estructuras de datos complejas o paquetes o bibliotecas de terceros. El primer código está escrito en Python.

Si ejecuta el código Python, tardará 61,23 segundos en generar los 67 millones de 13-mers. Para tener una comparación justa, comenté las líneas que muestran k-mers (líneas 25 y 37). Si desea mostrar k-mers mientras se generan, puede descomentar esas dos líneas. Nota: lleva mucho tiempo mostrarlos todos. Utilice CTRL + C para cancelar el código si lo necesita.

Ahora, echemos un vistazo al mismo algoritmo en C ++.

Después de compilar, si ejecuta el código, se necesitan aproximadamente 2,42 segundos para generar los 67 millones de 13-mers. Significa que Python tarda 25 veces más en ejecutar el mismo algoritmo en comparación con C ++. Repetí el experimento para 14-mers y 15-mers (necesita cambiar las líneas 12 en el código Python y 22 en el código C ++). La Tabla 1 resume los resultados.

Tabla 1) Comparación de tiempos de ejecución de Python y C ++ para generar 13, 14 y 15 mers.

Claramente, C ++ es mucho más rápido que Python al ejecutar el mismo algoritmo e instrucciones. No es una sorpresa para la mayoría de los programadores y científicos de datos, pero el ejemplo muestra que la diferencia es significativa.

Quiero enfatizar nuevamente que ambos códigos están escritos en sus formas más simples (y probablemente más ineficientes). Hay decenas de otros enfoques en Python que pueden mejorar el rendimiento del código y debe probarlos. Como ejemplo, podemos escribir un código simple en Python que sea casi tan rápido como C ++ para este propósito.

Además, en este ejemplo, no usamos la paralelización de CPU o GPU, que debe hacerse para este tipo de problemas (problemas vergonzosamente paralelos). Además, en este ejemplo, no involucramos mucho la memoria. Si almacenamos los resultados (por ejemplo, por algunas razones específicas), entonces la administración de la memoria podría incluso hacer una diferencia más significativa entre los tiempos de ejecución de C ++ y Python.

Este ejemplo y miles de otros desafíos sugieren que incluso los científicos de datos deberían conocer lenguajes como C ++ si están trabajando con una gran cantidad de datos o con procesos de crecimiento exponencial. Además, el artículo muestra que hay muchas formas de escribir códigos eficientes en Python que deben explorarse y probarse antes de ir después de C ++.

Sígueme en Twitter para conocer las últimas historias: https://twitter.com/TamimiNas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

UbPbzmPUMW8VUvrEWEMUBY 1200 80

Cómo subir de nivel rápidamente en Fortnite, ganar XP y obtener esas recompensas

oracle social share fb

oracley FarApp