Betreff: Warum kann das Schreiben und Aufrufen von Funktionen die Ausführungszeit erheblich beschleunigen? Und was sind die Faustregeln, um JSL für die effizienteste Zeit-/Raumkomplexität zu schreiben?Das würde ich auch nicht erwarten. Es gibt einen kleinen Overhead für den Funktionsaufruf, der mit dem Kopieren der Parameter und dem Einrichten der lokalen Variablen zusammenhängt.
Aber ... wenn es sich um ein riesiges Array handelt, das mehr als die Hälfte des verfügbaren Speichers verwendet, würde die Verwendung einer lokalen Variablen in der Funktion sicherstellen, dass der Speicher freigegeben wird, bevor er erneut benötigt wird.Betrachten Sie diese JSL:
x = J(20000,20000,0);
...
x = J(20000,20000,0);
Die erste Zuweisung benötigt 3 GB Speicher. Die zweite Zuordnung benötigt zusätzliche 3 GB, bevor sie die erste freigeben kann (wenn x überschrieben wird). Wenn x in der Funktion lokal und nicht global ist, wird der Speicher für x freigegeben, wenn das lokale x am Ende vergessen wird der Funktion. Wenn dies nicht der Fall ist, lagert ein 4-GB-Computer das alte x auf die Festplatte aus, während der Speicher für den neuen Speicher, der x ersetzen wird, auf Null gesetzt wird. Dann wird es vergessen, was es auf die Festplatte ausgelagert hat.
Wenn das nach dem klingt, was Sie tun, versuchen Sie Folgendes, um es zu beweisen:
x = J(20000,20000,0);
...
x=0; // forget the old allocation first
x = J(20000,20000,0);
Betreff: Warum kann das Schreiben und Aufrufen von Funktionen die Ausführungszeit erheblich beschleunigen? Und was sind die Faustregeln, um JSL für die effizienteste Zeit-/Raumkomplexität zu schreiben?... und hptime() ist die Mikrosekundenfunktion. (hohe Leistung? nicht sicher, wofür hp steht.)
Warum kann das Schreiben und Aufrufen von Funktionen die Ausführungszeit erheblich verkürzen? Und was sind die Faustregeln, um JSL für die effizienteste Zeit-/Raumkomplexität zu schreiben?Hallo allerseits,
Eine meiner Aufgaben ist die Durchführung der Zuverlässigkeitsanalyse, bei der ich Fit Life by X verwende.
Dabei habe ich zwei JSL-Skripte, die ausgeben genau die gleichen Ergebnisse aber habe verschiedene Codierungsansätze .
Beim ersten Ansatz werden einfach mehrere Codeteile kaskadiert. Der Pseudocode sieht in etwa wie folgt aus:
// Plot Fit Life by X #1
Fit Life by X(...);
// Plot Fit Life by X #2
Fit Life by X(...);
// Plot Fit Life by X #3
Fit Life by X(...);
// And so on
Die zweite hat eine einzelne Funktion, die wir als wiederholt mit verschiedenen X-, Y- und Zensorspalten bezeichnen. Der Pseudocode sieht in etwa wie folgt aus:
// Function that contains Fit Life by X
reli_analysis = function(
{input parameters},
{local variables},
Fit Life by X(...);
);
// Call the above function multiple times
reli_analysis(input parameters set #1);
reli_analysis(input parameters set #2);
reli_analysis(input parameters set #3);
// And so on
Ich habe die Erfahrung gemacht, dass der zweite Code viel schneller ist als der erste, etwa zehnmal schneller. (Mein tatsächliches JSL mit dem realen Datensatz hat eine Ausführungszeit (gemessen anhand der Wanduhrzeit) von ~17 Sekunden von Code Nr. 2 gegenüber ~170 Sekunden von Code Nr. 1.)
Ich habe folgende drei Fragen:
1. Warum ist der Aufruf der Funktion viel schneller als das explizite Schreiben aller Codes?
2. Welche anderen Vorgehensweisen/Tipps sollte ich generell befolgen, um sicherzustellen, dass mein Code die effizienteste zeitliche und/oder räumliche Komplexität aufweist?
3. Ich bin nicht sicher, ob JSL integrierte Timing-Funktionen wie CPU-Zeit und Wanduhrzeit hat? Ich habe die Codeausführungen mit der Funktion today() zeitlich gesteuert, aber das erfordert viel manuelle Codierung. Darüber hinaus unterscheiden sich die so berechneten verstrichenen Zeiten immer geringfügig, je nachdem, ob andere Aufgaben ausgeführt werden.
Vielen Dank für deine Hilfe.
JMP-Version: 17.0
Automatisierung und SkripterstellungQualitäts- und VerfahrenstechnikWindowsBetreff: Warum kann das Schreiben und Aufrufen von Funktionen die Ausführungszeit erheblich beschleunigen? Und was sind die Faustregeln zum Schreiben von JSL mit der effizientesten Zeit-/Raumkomplexität?Eine weitere Möglichkeit: Wenn das vorherige Diagramm geöffnet ist und die Datentabelle geändert wird, um das neue Diagramm zu erstellen, reagiert das alte Diagramm möglicherweise auf jede Änderung der Datentabelle. Vielleicht schließt die Funktionsversion das alte Diagramm früher?