¿Por qué Python corre relativamente lento?

13

He estado comparando el Pi en algunos de mis códigos de simulación, en relación con un par de computadoras portátiles que tengo. Mis códigos tienden a ser intensivos en coma flotante, por lo que he estado usando Raspbian (que resulta ser mucho más rápido) debido a su soporte de flotación dura. Tengo el mismo código simple en varios idiomas diferentes. Obviamente, el código de Python es más lento que el código C, independientemente de la plataforma que use, pero en Pi parece ser relativamente más lento, por un factor de alrededor de 3. ¿Alguien sabe por qué el intérprete de Python es relativamente lento en Pi? ¿Es esto algo que es probable que se solucione?

Aquí está la prueba:

import random,math

def gibbs(N=50000,thin=1000):
    x=0
    y=0
    print "Iter  x  y"
    for i in range(N):
        for j in range(thin):
            x=random.gammavariate(3,1.0/(y*y+4))
            y=random.gauss(1.0/(x+1),1.0/math.sqrt(2*x+2))
        print i,x,y

gibbs()

De esta publicación de blog sobre el experimento.

Darren Wilkinson
fuente
2
La autopromoción está bien (dentro de lo razonable), pero todo el enlace de su blog realmente agregado a la pregunta fue el código, así que lo he movido aquí.
Jivings
2
Um, también contenía detalles y tiempos y otros antecedentes potencialmente útiles que corroboraron la afirmación de que Python es más lento en relación con C en el Pi que en las máquinas Linux basadas en Intel, que era el punto de la cuestión ...
Darren Wilkinson
2
Leí toda la publicación, no creo que haya aportado información increíblemente relevante para la pregunta. Y pedirle a todos que lean una página de información antes de que puedan responder a su pregunta no le dará muchas respuestas. Los programadores son, por definición, vagos. Necesitamos toda la información en fragmentos fáciles de digerir :)
Jivings
8
Esa es una decisión con la que estoy de acuerdo, ya que soy un tipo de persona tranquila ... Pero estoy un poco preocupado de que esta celosa sobreedición de casi todas las preguntas publicadas en este sitio pueda disuadir a las personas de participar. Sé que se hace con las mejores intenciones, pero sabes lo que dicen sobre el camino al infierno ... Realmente creo que es algo que todos ustedes, editores de preguntas muy activos, deberían tomarse un tiempo para pensar y conversar. Sería una verdadera pena si este sitio no despegara debido a las acciones de algunas personas bien intencionadas pero equivocadas.
Darren Wilkinson
1
Pregunta estúpida ... ¿estabas ejecutando la misma versión de Python en ambos lados de la ecuación? Esperaría que en el mismo hardware, python3 ejecute el mismo código más rápido que python2 porque el rango en python3 es un iterador y en python2, crea la lista que es menos eficiente (use xrange en python2) ... ver por ejemplo stackoverflow. com / preguntas / 94935 / ...
Foon

Respuestas:

7

Supongo que el intérprete de Python simplemente no está optimizado para ARM. Python podría haber sido optimizado para las otras plataformas. En mi experiencia, esto es cierto para software como OpenSSH, así que supongo que es similar para Python.

Kevin Chen
fuente
2

Python probablemente sufre de falta de caché de la CPU. Sin embargo, no estoy seguro de cómo puedes medir eso fácilmente

John La Rooy
fuente