Konstanten innerhalb oder außerhalb einer Schleifen einfügen
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
05.09.2012, 11:22 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2012 11:22 von BEng Thomas.)
Konstanten innerhalb oder außerhalb einer Schleifen einfügen
Hallo LabVIEW Forum,
ich habe heute mal eine allgemeine Frage. Werden Konstanten die innerhalb einer Schleife sind, bei jedem Durchgang der Schleife neu initialisieren und kostet damit Rechenzeit (besonders dann, wenn die Schleiffe sehr oft durchlaufen). Oder ist es genau das gleich, als wenn die Konstanten außerhalb der Schleife sind und rein verbunden werden??? Im Anhang mal zwei Beispielbilder für das bessere Verständnis meiner Frage.
RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen
Hallo,
in älteren LV-Versionen konnte es vorteilhaft sein, Konstanten außerhalb von Schleifen zu haben: Der Compiler hat das dann effizienter umgesetzt. Wie der Compiler in neueren LV-Versionen (ab 2010) das handhabt, kann ich nicht sagen (könnte man aber mit einem Speedtest prüfen)...
Zu deinem Beispiel: Ich würde komplett auf die FOR-Loop verzichten...
RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen
In der Tat, auch in LV2010 (in der Entwicklungsumgebung) ist die Konstante außerhalb der Schleife schneller als in der Schleife. Also Konstante ist nicht gleich Konstante. Allerdings sind es nur ein paar Millisekunden bei 1 Million Schleifendurchläufen mit einer Arraykonstanten mit 10001 Element.
05.09.2012, 16:17 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2012 16:19 von Lucki.)
RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen
(05.09.2012 12:24 )unicorn schrieb: In der Tat, auch in LV2010 (in der Entwicklungsumgebung) ist die Konstante außerhalb der Schleife schneller als in der Schleife. Also Konstante ist nicht gleich Konstante.
Und in der Tat, in LV2011 ist das nicht mehr der so :
Bei den letzen Versionsänderungen wurde nicht zuletzt überall an der Geschwindigkeit herumgefeilt. In dem geposteten Link zu NI steht als Datum 2009, ein Kommentar darin ist aber von 2006, also ist der Text mindestens so alt. Inzwischen hat sich vieles geändert, das muss nicht mehr alles so gelten. Fest steht auch, dass jeder Tunnel eine Kopie erzeugt, was eher gegen eine Platzierung außerhalb spricht.
Auf jeden Fall gilt: Grau ist alle Theorie, und praktisch kann man (- in den seltenen Fällen, in denen das überhaupt relevant ist) mit einem kleinem Test VI (s.oben) ganz schnell feststellen, was am schnellsten und am wenigsten Memory-intensiv ist.
05.09.2012, 16:40 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2012 16:45 von jg.)
RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen
Ich habe mal kürzlich einen Vortrag über den aktuellen LabVIEW-Compiler gehört.
Seit LabVIEW 2010 sollte es egal sein, wo die Konstanten platziert sind, der Compiler sollte das wegoptimieren.
@Lucki: Ich habe deinen Test ebenfalls nachgestellt, konnte aber bei mehrfacher Wiederholung und Umstellung der Reihenfolge keine signifikanten Unterschiede feststellen. Einmal ist die ein eine Implementation 1-2 ms schneller, dann die andere.
Besonders interessant wird dein Bsp, wenn du mal in deinem VI das Debugging abschaltest (also unter Execution "Allow Debugging" und "Error Handling"). Dann wird der LV-Compiler nämlich besonders schlau. Da du keine Ausgabe des berechneten Arrays hast und das auch nicht weiterverwendest, wird nämlich die komplette For-Loop wegoptimiert und die Durchlaufzeit ist 0 ms!!!
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen
(05.09.2012 11:27 )unicorn schrieb: Eine Konstante ist, wie der Name sagt, konstant.
D.h. sie ist in einem kompilierten Programm eine Specherstelle mit nicht veränderbarem Wert
Zitat: Sie wird beim Programmieren "initialisiert".
Das verstehe ich nicht: Eine Konstante dient u.a. dazu, andere Werte zu initialisieren. Wie hat man sich das vorzustellen, wenn eine Konstante sich selbst initialisiert?
(Bin kein gelernter Softie, die Frage ist ehrlich und nicht polemisch gemeint)
@Jens
Zitat:Besonders interessant wird dein Bsp, wenn du mal in deinem VI das Debugging abschaltest (also unter Execution "Allow Debugging" und "Error Handling")
Es erstaunt mich immer mal wieder, was Du so alles aus Deinem Köcher zauberst. Von Dir habe ich hier das Meiste gelernt. Habs mal so gemacht und den Test etwas verändert. Man sieht jetzt noch deutlicher, dass die beiden Varianten gleichwertig sind.
RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen
Hallo LabVIEW-Forum,
vielen Dank für die zahlreichen und schnellen Antworten. Ich habe meine Konstanten jetzt innerhalb der Schleifen gelassen und alles läuft perfekt und schnell genug.