LabVIEWForum.de
Konstanten innerhalb oder außerhalb einer Schleifen einfügen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Konstanten innerhalb oder außerhalb einer Schleifen einfügen (/Thread-Konstanten-innerhalb-oder-ausserhalb-einer-Schleifen-einfuegen)



Konstanten innerhalb oder außerhalb einer Schleifen einfügen - BEng Thomas - 05.09.2012 11:22

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.


Danke für alle Antworten

Grüße

BEng Thomas


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - unicorn - 05.09.2012 11:27

Hallo,

Eine Konstante ist, wie der Name sagt, konstant. Sie wird beim Programmieren "initialisiert".

Wozu ist das wichtig?


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - NWOmason - 05.09.2012 11:48

(05.09.2012 11:22 )BEng Thomas schrieb:  Werden Konstanten die innerhalb einer Schleife sind, bei jedem Durchgang der Schleife neu initialisieren

Ist zwar speziell auf embedded gestrickt, gilt aber generell:
Optimizing LabVIEW Embedded Applications - Data Placement
http://www.ni.com/white-paper/3747/en#toc2

Beste Grüße,
NWO


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - GerdW - 05.09.2012 11:48

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... Wink


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - unicorn - 05.09.2012 12:24

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.


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - Lucki - 05.09.2012 16:17

(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 Big Grin:
[attachment=41438]
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.


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - jg - 05.09.2012 16:40

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.

Hierzu ein paar Links:
http://www.ni.com/white-paper/11472/en, bzw. hier auf deutsch: http://www.ni.com/white-paper/11472/de
http://zone.ni.com/devzone/cda/pub/p/id/1177

Gruß, Jens


@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!!!


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - unicorn - 05.09.2012 17:08

Also, ich kann meinen Test von vorhin auf dem selben System auch nicht reproduzieren.


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - Lucki - 06.09.2012 08:08

(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.
[attachment=41448]


RE: Konstanten innerhalb oder außerhalb einer Schleifen einfügen - BEng Thomas - 18.09.2012 11:05

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.

Grüße

BEng Thomas