Hallo,
ich habe Folgendes beobachtet (Xcode 4.5.2, iPad-Simulator) und kann es mir nicht erklären: In einer Methode werden zunächst einige (10-15) double-Variablen berechnet, die allerdings statisch und nicht von Übergabeparametern oder sonstigen änderbaren Variablen abhängig sind. Anschließend werden mit diesen Werten und den Übergabeparemetern per Saldo rund 50 double-Operationen (Plutimikationen und Additionen, sin, cos, tan, sqrt, pow in einer wilden mathematischen Orgie) durchgeführt.
Ich habe den Aufruf der Methode in zwei [NSDate date]-Aufrufe geschachtelt, weil ich wissen will, wie schnell das ist.
Phänomen 1: Beim ersten Aufruf dauert der Durchlauf z.B. 0.0000312s. Bei allen folgenden Durchläufen, auch wenn sich die Werte der Parameter ändern, z.B. 0.0000036s - also 10x schneller! Warum?
Phänomen 2: Ich habe die "statischen" Variablen berechnet und durch #defines ersetzt. M.E. das Beste, wenn man Variablen-Overhead reduzieren möchte, weil die Dinger im Präprozessor as-is eingefügt werden. Egal. Im Ergebnis fallen also die besagten 10-15 double-Berechnungen weg. Wenn ich nun das Ding starte, ist das Laufzeitverhalten identisch - ja, identisch!! - zum vorigen Durchgang (s. Phänomen 1). Das heißt, dass der Durchgang z.B. erst 0.000034s und dann immer 0.000003s dauert. Aber waurm??
Ich versteh es nicht.
#Edit: Auf einem iPad mini gleiches Verhalten, nur etwas langsamer: 0.0004s zu 0.00002s
ich habe Folgendes beobachtet (Xcode 4.5.2, iPad-Simulator) und kann es mir nicht erklären: In einer Methode werden zunächst einige (10-15) double-Variablen berechnet, die allerdings statisch und nicht von Übergabeparametern oder sonstigen änderbaren Variablen abhängig sind. Anschließend werden mit diesen Werten und den Übergabeparemetern per Saldo rund 50 double-Operationen (Plutimikationen und Additionen, sin, cos, tan, sqrt, pow in einer wilden mathematischen Orgie) durchgeführt.
Ich habe den Aufruf der Methode in zwei [NSDate date]-Aufrufe geschachtelt, weil ich wissen will, wie schnell das ist.
Phänomen 1: Beim ersten Aufruf dauert der Durchlauf z.B. 0.0000312s. Bei allen folgenden Durchläufen, auch wenn sich die Werte der Parameter ändern, z.B. 0.0000036s - also 10x schneller! Warum?
Phänomen 2: Ich habe die "statischen" Variablen berechnet und durch #defines ersetzt. M.E. das Beste, wenn man Variablen-Overhead reduzieren möchte, weil die Dinger im Präprozessor as-is eingefügt werden. Egal. Im Ergebnis fallen also die besagten 10-15 double-Berechnungen weg. Wenn ich nun das Ding starte, ist das Laufzeitverhalten identisch - ja, identisch!! - zum vorigen Durchgang (s. Phänomen 1). Das heißt, dass der Durchgang z.B. erst 0.000034s und dann immer 0.000003s dauert. Aber waurm??
Ich versteh es nicht.
#Edit: Auf einem iPad mini gleiches Verhalten, nur etwas langsamer: 0.0004s zu 0.00002s
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fwtag ()