Pourquoi python fonctionne-t-il relativement lentement?

13

J'ai comparé le Pi sur certains de mes codes de simulation, par rapport à quelques ordinateurs portables que j'ai. Mes codes ont tendance à être intensifs en virgule flottante, donc j'utilise Raspbian (qui s'avère beaucoup plus rapide) en raison de son support flottant. J'ai le même code simple dans plusieurs langues différentes. De toute évidence, le code python est plus lent que le code C quelle que soit la plateforme que j'utilise, mais sur le Pi, il semble être relativement plus lent, par un facteur d'environ 3. Est-ce que quelqu'un sait pourquoi l'interpréteur python est susceptible d'être relativement lent sur le Pi, et est-ce quelque chose qui est susceptible d'être corrigé?

Voici le test:

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 ce billet de blog sur l'expérience.

Darren Wilkinson
la source
2
L'autopromotion est très bien (dans des limites raisonnables), mais tout le lien de votre blog vraiment ajouté à la question était le code, donc je l'ai déplacé ici à la place.
Jivings
2
Um, il contenait également des détails et des délais et d'autres informations potentiellement utiles qui étayaient l'affirmation selon laquelle le python est plus lent par rapport à C sur le Pi que sur les machines Linux basées sur Intel, ce qui était en quelque sorte le point de la question ...
Darren Wilkinson
2
J'ai lu l'intégralité du message, je ne pense pas que cela ait apporté des informations incroyablement pertinentes pour la question. Et demander à tout le monde de lire une page d'informations avant de pouvoir répondre à votre question ne vous apportera pas beaucoup de réponses. Les programmeurs sont par définition, paresseux. Nous avons besoin de toutes les informations en morceaux faciles à digérer :)
Jivings
8
C'est un jugement qui me convient, car je suis un gars facile à vivre ... Mais je suis un peu préoccupé par le fait que cette réédition zélée de presque toutes les questions publiées sur ce site est susceptible de dissuader les gens de participer. Je sais que c'est fait avec les meilleures intentions, mais vous savez ce qu'ils disent à propos de la route de l'enfer ... Je pense vraiment que c'est quelque chose que vous tous, les éditeurs de questions très actifs, devriez prendre un peu de temps pour réfléchir et discuter. Ce serait vraiment dommage si ce site ne décollait pas à cause des actions de quelques individus bien intentionnés mais mal orientés.
Darren Wilkinson
1
Question stupide ... utilisiez-vous la même version de python des deux côtés de l'équation? Je m'attendrais à ce que sur le même matériel, python3 exécute le même code plus rapidement que python2 car la plage sur python3 est un itérateur et sur python2, elle crée la liste qui est moins efficace (utilisez xrange sur python2) ... voir par exemple stackoverflow. com / questions / 94935 /…
Foon

Réponses:

7

Je suppose que l'interpréteur Python n'est tout simplement pas optimisé pour ARM. Python pourrait avoir été optimisé pour les autres plates-formes. D'après mon expérience, cela est vrai pour des logiciels comme OpenSSH, donc je suppose que c'est similaire pour Python.

Kevin Chen
la source
2

Python souffre probablement d'un manque de cache cpu. Je ne sais pas comment vous pouvez mesurer cela facilement

John La Rooy
la source