LabVIEWForum.de
warum ist die Globale Variable schneller? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: warum ist die Globale Variable schneller? (/Thread-warum-ist-die-Globale-Variable-schneller)

Seiten: 1 2 3


warum ist die Globale Variable schneller? - toaran_ - 03.09.2010 14:38

Hallo zusammen

ich habe folgendes Problem ....

ich habe in einem Vi eine While Schleife die alle 100ms einmal "schleift" ...

da werden Com Ports ausgelesen udn die Dasten Verarbeitet etc ... nun wollte ich diese Daten in eine Art Register speichern und das Register als Notifier jeweil einmal lesen und am ende wenn die Daten drinn stehen wieder schreiben.... andere Vis können sich dann aus dem "Register"-Notifier die Daten rausholne wenn benötigt ...
soweit so gut funktioniert auch ...

Aber...

wenn ich das Register so gross mache wie ich es brauche (1024 Werte) wird das ganze sehr "langsam" ...

ich habe mal ein Test VI erstellt mit dem Ablauf im richtigen VI ohne das ganze drum rum ...

ich hab dann auch mal eine Globale Variable als Test genommen und musste feststellen das die um längen schneller ist ...

ich bin leicht verwirrt ... entweder mach ich was grundlegend falsch .... oder es hat sich was bei der abarbeitung von globalen Variablen bei LV 2010 geändert ... (ich hab jetzt grad nur LV2010 zum testen)


T

Lv10
hier mal das Vi und Snippet ...
[attachment=29189]

[attachment=29190]
und die globale Variable ...
[attachment=29191]


warum ist die Globale Variable schneller? - schrotti - 03.09.2010 18:44

In LV 9 ist die globale Variable ebenfalls schneller. Aber warum auch nicht? Für so eine Aufgabe würde ich aber niemals einen Notifier oder GloVar verwenden sondern entweder eine FGV oder, wenn unbedingt erforderlich, eine Queue. Die FGV schneidet bei mir mit <1ms am besten ab.


warum ist die Globale Variable schneller? - Y-P - 03.09.2010 18:48

Hier hab' ich was interessantes auf meiner Platte gefunden:
[attachment=29203]
Lv86_img

Gruß Markus


warum ist die Globale Variable schneller? - schrotti - 03.09.2010 19:03

Aber warum Kopien erstellen und Variablen immer neu beschreiben? Verfälscht den Vergleich meines Erachtens erheblich.
[attachment=29204]
[attachment=29205]
Lv09_img2[attachment=29206]

Hier der Vergleich:
Alt
[attachment=29207]

Mit Shiftregister und Datenfluss
[attachment=29208]


warum ist die Globale Variable schneller? - Y-P - 03.09.2010 19:14

Bei mir sind das statt 590 ms dann 575 ms. Macht also nicht viel aus.

Gruß Markus


warum ist die Globale Variable schneller? - schrotti - 03.09.2010 19:43

' schrieb:Bei mir sind das statt 590 ms dann 575 ms. Macht also nicht viel aus.

Bei was?


warum ist die Globale Variable schneller? - Y-P - 03.09.2010 20:49

Beim Notifier.

Gruß Markus


warum ist die Globale Variable schneller? - eg - 03.09.2010 21:03

Ich verstehe gar nicht wozu man in einer einzigen Schleife einen Notifier/eine GV braucht. Nimm doch ein Cluster oder Array.


warum ist die Globale Variable schneller? - schrotti - 03.09.2010 23:10

' schrieb:Beim Notifier.

Gruß Markus
Wenn ich die Referenz und den Fehlercluster nicht verzweige sondern wie im Bild verdrahte halbiert sich bei mir die Ausführungszeit. Bei der Queue ist der Effekt noch wesentlich heftiger. Das liegt aus der Ausführungsreihenfolge, die bei LV-Code leider nicht ersichtlich ist.

1. Dequeue Element wird ausgeführt. Die Queue ist leer, das Primitive wartet.
2. Enqueue Element wird aufgerufen und schiebt ein Element in die Queue.
3. Dequeue Element bricht den Wartevorgang ab, da ein Element zum Auslesen vorhanden ist.

Die Kopien rauben auch mir nur 5 ms, aber der unnötige Wartevorgang raubt 1600 ms und damit über 90 % der gemessenen Zeit.

@eg: Das soll hier hoffentlich nur ein Beispiel sein, aber siehe vi.libUtilityconfig.llb


warum ist die Globale Variable schneller? - Y-P - 04.09.2010 07:57

Das ist nur ein Bsp., das die unterschiedlichen Verfahren vergleichen soll.

Gruß Markus

' schrieb:Ich verstehe gar nicht wozu man in einer einzigen Schleife einen Notifier/eine GV braucht. Nimm doch ein Cluster oder Array.