Warum läuft Python relativ langsam?

13

Ich habe den Pi mit einigen meiner Simulationscodes verglichen, relativ zu ein paar Laptops, die ich habe. Meine Codes sind in der Regel fließkommaintensiv, daher verwende ich Raspbian (was sich als viel schneller herausstellt ), da es schwer zu fließen ist. Ich habe den gleichen einfachen Code in mehreren verschiedenen Sprachen. Offensichtlich Python - Code ist langsamer als C - Code unabhängig von Plattform I verwenden, aber auf dem Pi erscheint es relativ zu mehr langsam, um einen Faktor von etwa 3. Wer weiß , warum das Python - Interpreter wahrscheinlich relativ langsam auf dem Pi sein soll, und Ist dies etwas, das wahrscheinlich behoben wird?

Hier ist der 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()

Von diesem Blogbeitrag über das Experiment.

Darren Wilkinson
quelle
2
Eigenwerbung ist in Ordnung (im Rahmen des Zumutbaren), aber Ihr Blog-Link, der der Frage wirklich hinzugefügt wurde, war der Code. Ich habe ihn stattdessen hierher verschoben.
Jivings
2
Um es auch Details enthalten und Timings und andere potenziell nützliche Hintergrundinformationen, die den Anspruch untermauerten , dass Python langsamer relativ auf dem Pi bis C ist als auf Intel - basierte Linux - Maschinen, die Art des Punktes nicht in Frage ...
Darren Wilkinson
2
Ich habe den ganzen Beitrag gelesen, ich glaube nicht, dass er Informationen lieferte, die für die Frage unglaublich relevant sind. Wenn Sie alle bitten, eine Informationsseite zu lesen, bevor sie Ihre Frage beantworten können, werden Sie nicht viele Antworten erhalten. Programmierer sind per Definition faul. Wir brauchen alle Informationen in leicht verdaulichen
Stücken
8
Das ist ein Urteilsspruch, mit dem ich einverstanden bin, da ich ein lockerer Typ bin ... Aber ich bin ein bisschen besorgt, dass diese eifrige Überarbeitung von fast jeder Frage, die auf dieser Website veröffentlicht wird, wahrscheinlich Leute abschrecken wird von der Teilnahme. Ich weiß, dass es mit den besten Absichten gemacht wurde, aber Sie wissen, was sie über den Weg zur Hölle sagen ... Ich denke wirklich, dass es etwas ist, worüber sich alle sehr aktiven Fragenbearbeiter etwas Zeit nehmen sollten, um darüber nachzudenken und sich zu unterhalten. Es wäre eine echte Schande, wenn diese Seite nicht aufgrund der Handlungen einiger gut gemeinter, aber fehlgeleiteter Personen auf die Beine gestellt würde.
Darren Wilkinson
1
Dumme Frage ... haben Sie auf beiden Seiten der Gleichung dieselbe Version von Python ausgeführt? Ich würde erwarten, dass python3 auf derselben Hardware denselben Code schneller ausführt als python2, da range auf python3 ein Iterator ist und auf python2 die Liste erstellt, die weniger effizient ist (verwenden Sie xrange auf python2) ... siehe zum Beispiel stackoverflow. com / questions / 94935 /…
Foon

Antworten:

7

Ich würde vermuten, dass der Python-Interpreter einfach nicht für ARM optimiert ist. Python wurde möglicherweise für die anderen Plattformen optimiert. Nach meiner Erfahrung gilt dies für Software wie OpenSSH, daher gehe ich davon aus, dass dies für Python ähnlich ist.

Kevin Chen
quelle
2

Python leidet wahrscheinlich an einem Mangel an CPU-Cache. Ich bin mir nicht sicher, wie Sie das leicht messen können

John La Rooy
quelle