SlideShare una empresa de Scribd logo
Python más rápido  que C Facundo Batista Lucio Torre
Objetivos Divertirse Comparar tiempos de ejecución en Python y C Sin perder de vista otros factores Errores tontos ( < 5 seg) Errores complicados ( > 10 min, una taza de café y una patada al sofá) Cantidad de lineas de código Complejidad de diseño ¡Pero haciendo énfasis en el tiempo! ¿Es C más rápido que Python? ¿Cuándo? ¿Cuánto?
Recuerden We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Donald Knuth Structured Programming with goto Statements ACM Journal Computing Surveys Vol 6, No. 4, Dec. 1974. p.268
Gap Bajo nivel  Alto nivel (código final)  (ideas) ASM  C  Python ¡este camino lo tiene que recorrer alguien!
Multiplicar un número ASM .file  &quot;mult.c&quot; .text .globl main .type  main, @function main: leal  4(%esp), %ecx andl  $-16, %esp pushl  -4(%ecx) pushl  %ebp movl  %esp, %ebp pushl  %ecx subl  $16, %esp movl  $5, -16(%ebp) movl  $10, -12(%ebp) movl  -16(%ebp), %eax imull  -12(%ebp), %eax movl  %eax, -8(%ebp) addl  $16, %esp popl  %ecx popl  %ebp leal  -4(%ecx), %esp ret .size  main, .-main .section  .note.GNU-stack,&quot;&quot;,@progbits C void main(void) { int a=5, b=10, c; c = a * b; } Python a = 5 b = 10 c = a * b
Traduciendo C se pasa a ASM en tiempo de compilación Python a instrucciones de su VM: 2  0 LOAD_CONST  1 (5) 3 STORE_FAST  0 (a) 3  6 LOAD_CONST  2 (10) 9 STORE_FAST  1 (b) 4  12 LOAD_FAST  0 (a) 15 LOAD_FAST  1 (b) 18 BINARY_MULTIPLY  19 STORE_FAST  2 (c) 22 LOAD_CONST  0 (None) 25 RETURN_VALUE  ¿Cómo comparamos?
ptrace int main() {  pid_t child; BIGNUM *count; child = fork(); count = BN_new(); if(child == 0) { ptrace(PTRACE_TRACEME, 0, NULL, NULL); execl(&quot;/usr/bin/python&quot;, &quot;python&quot;, &quot;nada.py&quot;, NULL); } else { int status; while(1) { wait(&status); if(WIFEXITED(status)) break; ptrace(PTRACE_SINGLESTEP, child, NULL, NULL); BN_add(count, count, BN_value_one()); } printf(&quot;Total %s\n&quot;, BN_bn2dec(count)); } return 0; }
Cuánto ejecutamos Vemos cuantas instrucciones se ejecutan... Haciendo Nada, para ver el costo por estructura Multiplicando un sólo número Realizando 100 mil multiplicaciones ¡Python es más de 100 veces más lento! ¿Posta?
Multiplicamos un número ¿Cuanto se tarda en todo el proceso?   edición  compilación  ejecución C  x  y  z python  x/2  0  z * 100 calculadora  x/5  0  q  (q <<x) Para definir una metrica, lo importante es el contexto
Un caso más real Tomamos muchos valores de algún lado: Generamos previamente un millón de pares de enteros Los leemos y multiplicamos Vemos que C es mucho más rápido que Python en este caso, donde el procesador hace todo En Python hicimos mucho más que multiplicar dos  ints.
Soportando big nums Casi lo mismo que antes... Usamos enteros de entre 0 y 32 dígitos En Python no hay que hacer nada En C tuvimos que usar una biblioteca externa ¡Rayas y centollas!  ¿Multiplicando enteros Python es tan rápido como C?
¡A la hoguera! ¡Herejía, herejía!  (acá abandonamos el primer día de trabajo)
Enfocándonos Tratamos de apuntar a performance Dejamos de usar tanto disco Explotamos ventajas de C Acceso a memoria Multiplicación pura ¡Multiplicamos matrices! Tiempo de codeo:  C:  50 min  Py:  18 min De 10x10, 100x100 y 200x200 Multiplicamos por si misma muchas veces len( str( m[0][0] ) ) de la última: 3518!
Matrices
Relación entre ambos Python es más parecido a C cuanto más grande es el cálculo (no tenemos ni idea por qué)
Saliendo de los números Realizamos un ejercicio más clásico Tomamos un texto grande (todo Shakespeare) Generamos al azar una lista de tokens de ese texto El ejercicio es escribir en otro archivo esas palabras y en que posición del texto original aparecen... Python es tan rápido cómo C si lo optimizamos un poco
Optimizando Optimizamos después  de revisar tiempos Es más fácil optimizar código correcto que corregir código optimizado
Enfocándonos (de nuevo) Tratamos de eliminar overheads comunes No escribimos más a disco Mostramos la palabra que aparece más cerca del final (y en que posición aparece) C es mucho más rápido que Python en este caso Porque modelamos la solución minimizando el uso de memoria dinámica.
Conclu... C es más rápido que Python, especialmente si... Dejamos que el procesador haga todo el trabajo Nos escapamos lo más posible de la memoria dinámica Pero esto lo encontramos ajustando las tareas para que tengan esas propiedades. En los experimentos pensados sin forzar esto, Python es tan rápido como C
...siones Muchas veces C es más rápido que Python, pero no siempre se justifica el esfuerzo extra “ Premature optimization  is the root of all evil”  Donald Knuth
Copyright  Facundo Batista y Lucio Torre Licencia Atribución-No Comercial-Compartir Obras Derivadas Igual 2.5 Genérica http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR

Más contenido relacionado

PPTX
Introduccion a Ppython
ODP
PDF
Paralela10
DOCX
Cuadro comparativo torres de hanoi
PDF
Cuadro comparativo torres de hanoi
DOCX
Cuadro comparativo torres de hanoi
PDF
Clase1_Python-CTIC
PPTX
Microcontroladores
Introduccion a Ppython
Paralela10
Cuadro comparativo torres de hanoi
Cuadro comparativo torres de hanoi
Cuadro comparativo torres de hanoi
Clase1_Python-CTIC
Microcontroladores

La actualidad más candente (18)

PPTX
Microcontroladores
PDF
Introducción a Google Go
PPT
Hebras En Accion
PDF
Paralela9
PDF
Numexpr (python madrid)
PDF
Clase3_Python-CTIC
PPTX
Python científico (introducción a numpy y matplotlib))
ODP
Tarea 1
PDF
Clase2_Python-CTIC
DOC
Analisis de Algoritmos
DOC
Laborqatoio 1 telematica
PDF
Aplicacion de limites
PPTX
Subrutinas de retardo
PPT
Python Tutorial Presentation
ODP
Introduccion a go
DOCX
Pic retardos por software
DOC
Micc final feb04_2010_soluc
PPTX
Analisis de Algoritmos Multihilo
Microcontroladores
Introducción a Google Go
Hebras En Accion
Paralela9
Numexpr (python madrid)
Clase3_Python-CTIC
Python científico (introducción a numpy y matplotlib))
Tarea 1
Clase2_Python-CTIC
Analisis de Algoritmos
Laborqatoio 1 telematica
Aplicacion de limites
Subrutinas de retardo
Python Tutorial Presentation
Introduccion a go
Pic retardos por software
Micc final feb04_2010_soluc
Analisis de Algoritmos Multihilo
Publicidad

Destacado (20)

PDF
Manual del dev c++
PDF
Parallel python sistemas operativos avanzados
PDF
Java vs Python
PPTX
Fases del proceso de programación
PPT
METODOLOGIA Y TECNOLOGIA DE LA PROGRAMACION I
PPTX
Fases de dasorrollo de un software Mapa Conceptual
PPTX
Fases del proceso de programación
PPTX
Tipos de programacion
PPTX
Fases del proceso de programación
PDF
Evolución de los Lenguajes de Programación.
PDF
Programación lineal entera y binaria
PPTX
HISTORIA DE LA PROGRAMACION
PPTX
Clases Scrollbar,Scrollpane,Choice
DOCX
Mapa conceptual fases en el desarrollo de un programa
PPTX
Programación de computadores
PPTX
Python Programming Essentials - M5 - Variables
PPT
Lección 1 Introducción a los Lenguajes de Programación
Manual del dev c++
Parallel python sistemas operativos avanzados
Java vs Python
Fases del proceso de programación
METODOLOGIA Y TECNOLOGIA DE LA PROGRAMACION I
Fases de dasorrollo de un software Mapa Conceptual
Fases del proceso de programación
Tipos de programacion
Fases del proceso de programación
Evolución de los Lenguajes de Programación.
Programación lineal entera y binaria
HISTORIA DE LA PROGRAMACION
Clases Scrollbar,Scrollpane,Choice
Mapa conceptual fases en el desarrollo de un programa
Programación de computadores
Python Programming Essentials - M5 - Variables
Lección 1 Introducción a los Lenguajes de Programación
Publicidad

Similar a Python Vs C (20)

ODP
Pyrapidc
DOC
Mynor Alexander Hernandez Canuz
PDF
Informatica3 de 3 apuntes eii año 24/25.
PPT
Modelo Simulado
DOC
Investigacion 1
PDF
El arte de programar c++ - versión 3.0
PDF
Prueba
PDF
Varios tema de c++ por (alvaro tejada)
PPTX
Python-Thonny programación avanzada TESE
DOCX
Lenguaje c neo
PPT
programacion de sistemas de informacion.ppt
DOCX
Cesar lenguaje c_
PDF
Funciones C++
PPT
Introduccion al Lenguaje de Programación C++
PDF
Ejercicios de programacion if - switch-case
PPT
Yudy Centeno M
PDF
Practicas bloque 1
Pyrapidc
Mynor Alexander Hernandez Canuz
Informatica3 de 3 apuntes eii año 24/25.
Modelo Simulado
Investigacion 1
El arte de programar c++ - versión 3.0
Prueba
Varios tema de c++ por (alvaro tejada)
Python-Thonny programación avanzada TESE
Lenguaje c neo
programacion de sistemas de informacion.ppt
Cesar lenguaje c_
Funciones C++
Introduccion al Lenguaje de Programación C++
Ejercicios de programacion if - switch-case
Yudy Centeno M
Practicas bloque 1

Último (20)

PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
TOMO II - LITERATURA.pd plusenmas ultras
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PPTX
caso clínico iam clinica y semiología l3.pptx
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
Tomo 1 de biologia gratis ultra plusenmas
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
TOMO II - LITERATURA.pd plusenmas ultras
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
ciencias-1.pdf libro cuarto basico niños
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
caso clínico iam clinica y semiología l3.pptx

Python Vs C

  • 1. Python más rápido que C Facundo Batista Lucio Torre
  • 2. Objetivos Divertirse Comparar tiempos de ejecución en Python y C Sin perder de vista otros factores Errores tontos ( < 5 seg) Errores complicados ( > 10 min, una taza de café y una patada al sofá) Cantidad de lineas de código Complejidad de diseño ¡Pero haciendo énfasis en el tiempo! ¿Es C más rápido que Python? ¿Cuándo? ¿Cuánto?
  • 3. Recuerden We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Donald Knuth Structured Programming with goto Statements ACM Journal Computing Surveys Vol 6, No. 4, Dec. 1974. p.268
  • 4. Gap Bajo nivel Alto nivel (código final) (ideas) ASM C Python ¡este camino lo tiene que recorrer alguien!
  • 5. Multiplicar un número ASM .file &quot;mult.c&quot; .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $16, %esp movl $5, -16(%ebp) movl $10, -12(%ebp) movl -16(%ebp), %eax imull -12(%ebp), %eax movl %eax, -8(%ebp) addl $16, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .section .note.GNU-stack,&quot;&quot;,@progbits C void main(void) { int a=5, b=10, c; c = a * b; } Python a = 5 b = 10 c = a * b
  • 6. Traduciendo C se pasa a ASM en tiempo de compilación Python a instrucciones de su VM: 2 0 LOAD_CONST 1 (5) 3 STORE_FAST 0 (a) 3 6 LOAD_CONST 2 (10) 9 STORE_FAST 1 (b) 4 12 LOAD_FAST 0 (a) 15 LOAD_FAST 1 (b) 18 BINARY_MULTIPLY 19 STORE_FAST 2 (c) 22 LOAD_CONST 0 (None) 25 RETURN_VALUE ¿Cómo comparamos?
  • 7. ptrace int main() { pid_t child; BIGNUM *count; child = fork(); count = BN_new(); if(child == 0) { ptrace(PTRACE_TRACEME, 0, NULL, NULL); execl(&quot;/usr/bin/python&quot;, &quot;python&quot;, &quot;nada.py&quot;, NULL); } else { int status; while(1) { wait(&status); if(WIFEXITED(status)) break; ptrace(PTRACE_SINGLESTEP, child, NULL, NULL); BN_add(count, count, BN_value_one()); } printf(&quot;Total %s\n&quot;, BN_bn2dec(count)); } return 0; }
  • 8. Cuánto ejecutamos Vemos cuantas instrucciones se ejecutan... Haciendo Nada, para ver el costo por estructura Multiplicando un sólo número Realizando 100 mil multiplicaciones ¡Python es más de 100 veces más lento! ¿Posta?
  • 9. Multiplicamos un número ¿Cuanto se tarda en todo el proceso? edición compilación ejecución C x y z python x/2 0 z * 100 calculadora x/5 0 q (q <<x) Para definir una metrica, lo importante es el contexto
  • 10. Un caso más real Tomamos muchos valores de algún lado: Generamos previamente un millón de pares de enteros Los leemos y multiplicamos Vemos que C es mucho más rápido que Python en este caso, donde el procesador hace todo En Python hicimos mucho más que multiplicar dos ints.
  • 11. Soportando big nums Casi lo mismo que antes... Usamos enteros de entre 0 y 32 dígitos En Python no hay que hacer nada En C tuvimos que usar una biblioteca externa ¡Rayas y centollas! ¿Multiplicando enteros Python es tan rápido como C?
  • 12. ¡A la hoguera! ¡Herejía, herejía! (acá abandonamos el primer día de trabajo)
  • 13. Enfocándonos Tratamos de apuntar a performance Dejamos de usar tanto disco Explotamos ventajas de C Acceso a memoria Multiplicación pura ¡Multiplicamos matrices! Tiempo de codeo: C: 50 min Py: 18 min De 10x10, 100x100 y 200x200 Multiplicamos por si misma muchas veces len( str( m[0][0] ) ) de la última: 3518!
  • 15. Relación entre ambos Python es más parecido a C cuanto más grande es el cálculo (no tenemos ni idea por qué)
  • 16. Saliendo de los números Realizamos un ejercicio más clásico Tomamos un texto grande (todo Shakespeare) Generamos al azar una lista de tokens de ese texto El ejercicio es escribir en otro archivo esas palabras y en que posición del texto original aparecen... Python es tan rápido cómo C si lo optimizamos un poco
  • 17. Optimizando Optimizamos después de revisar tiempos Es más fácil optimizar código correcto que corregir código optimizado
  • 18. Enfocándonos (de nuevo) Tratamos de eliminar overheads comunes No escribimos más a disco Mostramos la palabra que aparece más cerca del final (y en que posición aparece) C es mucho más rápido que Python en este caso Porque modelamos la solución minimizando el uso de memoria dinámica.
  • 19. Conclu... C es más rápido que Python, especialmente si... Dejamos que el procesador haga todo el trabajo Nos escapamos lo más posible de la memoria dinámica Pero esto lo encontramos ajustando las tareas para que tengan esas propiedades. En los experimentos pensados sin forzar esto, Python es tan rápido como C
  • 20. ...siones Muchas veces C es más rápido que Python, pero no siempre se justifica el esfuerzo extra “ Premature optimization is the root of all evil” Donald Knuth
  • 21. Copyright Facundo Batista y Lucio Torre Licencia Atribución-No Comercial-Compartir Obras Derivadas Igual 2.5 Genérica http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR