Tutorial
Ausführungsgeschwindigkeit bestimmen
von ytwinky | Seite 3 von 3 |
Startzeit festhalten
Anweisung ausführen
EndZeit festhalten
Ergebnis ausgeben
In diesem Programm habe ich einige Anweisungen ausprobiert(nur heißt die Variable nicht Hal, sondern i), deren Ergebnisse interessant sind:
i=i+1
i+=1
unterscheiden sich in der Taktanzahl nicht großartig. Spannender wird es bei '*': Hier gibt es deutliche Unterschiede zwischen geraden und ungeraden Zahlen, die sich aber damit begründen lassen, daß hier Prozessor-interne Befehle verwendet werden(bei geraden Zahlen) und die sind nunmal schneller..
Lassen wir unseren Blick über das Ausgabe-Protokoll schweifen, stellen wir fest, daß bei der Division die Anzahl der Taktzyklen steigt. Warum das denn? Eine mögliche Erklärung ist hier, daß bei der Division ja noch die Fehlerprüfung dazu kommt, denn der Prozessor muß ja prüfen, ob er nicht gerade durch 0 teilen soll. Da das noch nicht mal Mathematiker können, wie soll ein Prozessor das dann können, da er ja auch nur 'programmiert' ist.
Lassen wir unseren Blick etwas weiter schweifen, fällt sofort der nächste Außreißer auf: ^ der 'Exponentiator'
Der haut ja nun unheimlich 'rein, deshalb folgen ja auch gleich zwei Zeilen, die das etwas entschärfen:
d2=Atn(1)
z=3
d = d2 ^ z
d = d2 * d2 * d2
d = d2 ^ 3
Die drei letzten Anweisungen berechnen alle dasselbe, aber wie sehen denn die Taktzyklen aus?
Zum Einen liegt das natürlich daran, daß d2 doppelt-genau ist(Double). Somit zeigt dies, daß Double's den Prozessor ganzschön fordern.
Zum Schluß folgen noch ein paar 'Untersuchungen zum Thema 'Strings'. Wie zu erwarten, schlägt die Pointer-Schreibweise mit relativ wenig Taktzyklen zu Buche, das ist ja auch ganz in Ordnung so..
Wie sieht es denn nun mit meinem 'Liebling' Mid() aus? Boah, das haut ja noch mehr rein als '^'..
Deshalb habe ich Left() gleich dahinter platziert und wir stellen fest, daß Mid() und Left() sich nicht großartig unterscheiden. Der Wert für Right() steht hier nur zur Vervollständigung und zum Vergleich.
Fazit: Counter.Bas ist kein Werkzeug, das effizienten Programmcode erzeugen kann.
(Dafür habe ich meinen Programmgenerator..
..zwischen den Ohren)^^
Es kann aber ein wertvolle Hilfe sein, wenn ich die klassischen Wege schon alle beschritten habe:
Sowenig Doubles wie möglich verwenden, Berechnungen NICHT IN Schleifen durchführen, sondern wo es geht DAVOR.
Soweit läßt es sich pauschal sagen, alles Weitere hängt vom jeweiligen Programm ab.
So, fertich..
Hab' ich noch was vergessen? Achso ja, hier ist der Link für Counter.bas. Der führt ins englische Forum. Wer sich dort nicht zurecht findet, kann natürlich auch hier im FreeBASIC-Portal eine Version finden ;-))
Um dieses Tutorial ohne Probleme zu verwenden, bitte die alte Version von Counter.Bas benutzen!
Mit der überarbeiteten und auch mit der allerneuesten Version erhalte ich negative Taktzyklen-Werte!
Dieser Text wird geändert, sobald die Beispiele auch mit der neuesten Version laufen..
So, nun aber (mehr oder weniger) fröhliches Zählen xD
Gruß
ytwinky
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|