Wie lange braucht ein Raspberry Pi 2 ca um eine "If" abfrage zu rechnen?

5 Antworten

Unterschiedlich.

If ist einfach nur ein Sprung - das bedeutet der Befehlszähler muss verändert werden - was nicht lange dauert.

Wenn der Pi so auf circa 1GH taktet - irgendwo im 10^-8 Sekundne-Bereich.

Und nun kommen die ganzen lustigen Faktoren. z.B. Geschwindigkeit des RAMS - der viel langsamer ist als der Prozessor.

So ein Prozessor führt auch üblicherweise mehrere Instruktionen gleichzeitig aus. Das heißt, während dein if ausgewertet wird, wird parallel schon mal der nächste Befehl ausgeführt. Was jedoch ein Problem ist, weil der Prozessor weiß ja nicht, was nach dem if als nächstes ausgeführt wird.

Deshalb rät der Prozessor, ob das if genommen wird oder nicht - und führt spekulativ den nächsten Befehl aus. Der Prozessor kann dabei aber falsch liegen - und hat dann etwas berechnet, was er gar nicht berechnen sollte - was dann wegwerfen werden muss, was eben teuer ist.

Und so weiter...

Somit sind ifs verschieden teuer - es kann sogar sein, dass ein und das selbe if bei mehrmaligem durchlaufen völlig unterschiedliche Laufzeiten hat.

Mehr als Größenordnung lässt sich hier also nicht sagen.

Gruß

Tuxgamer

Kommt darauf an, wie die Abfrage übersetzt wird. Generell sollten es aber nicht mehr als zwei bis drei Maschinenbefehle sein. Wenn du die Taktrate kennst, kannst du das recht einfach abschätzen.

Test es doch selbst:

from time import clock

t1=clock()

if-Abfrage

t2=clock()
dt=t2-t1

print( dt )

Falls Du das Resultat willst: ungefähr 1*10^-5 Sekunden also 10 mikrosekunden.

1
@IBAxhascox

Viel zu ungenau.

Gibt doch mal einfach nur clock ein: Bekommst gerade mal 6 Nachkommstellen.

Wenn, dann teste bitte mit so etwas:

import timeit
timeit.timeit('x=False\nif x:\n\tprint"a"', number=10000)/10000

https://docs.python.org/2/library/timeit.html

Jedoch halte ich auch das für sehr kritisch.

Ergebnisse liegen eher bei 10^-7 (was ich auch für realistischer erachte).

1
@tuxgamer

Da hast du recht, insgesamt ist timeit() die bessere Lösung, da es je nach System den besten Timer auswählt und die Möglichkeit bietet, die Garbage Collection zu deaktivieren.

Wobei timeit() interessanterweise unter Windows time.clock() und unter Unix time.time() als Timer benutzt. Da time.clock() unter Windows und Unix unterschiedlich sind.

http://pythoncentral.io/measure-time-in-python-time-time-vs-time-clock/

0

Was möchtest Du wissen?