INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Programmbearbeitung durch globale Variablen erheblich langsamer?



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!

07.06.2012, 11:06 (Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2012 11:09 von rolfk.)
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.303
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Programmbearbeitung durch globale Variablen erheblich langsamer?
(06.06.2012 14:57 )Ativon schrieb:  Danke für die Antworten,

meine Frage die sich mir jetzt stellt, ist, ob FGVs nun mehr oder weniger Speicherauslastung oder Kompilierungsaufwand gegenüber Globalen Variablen für LabView bedeuten.

Danke im Vorraus.

Das lässt sich nicht generel sagen. Grundsätzlich sind globale Variablen aus zwei Gründen gefährlich.

1) Race Conditions

Wenn Du eine globale Variable an mehreren Stellen liest und schreibst dann hast Du die Chance auf Race Conditions. Stell Dir mal vor dass Du an Stelle X in Deinem Code die Globale jeweils um eins vergrösserst und an Stelle Y jeweils um eins verkleinerst. Dazu musst Du die Globale jeweils lesen und dann manipulieren und wieder zurückschreiben. Wenn die Codeteile X und Y grundsätzlich parallel ablaufen können, was in LabVIEW automatisch gegeben ist wenn zwischen diesen Teilen keine Datenabhängigkeiten bestehen, hast Du eine potentielle Race Condition, da in der Zeit dass Du die Globale liest und wieder zurückschreibst eine jeweilige Änderung dieser Globalen aus dem oder den anderen Codeteilen einfach überschrieben wird.

Mit FGVs lässt sich das besser managen, da man in ihnen eine explizite Methode Increment und Decrement implementieren kann, die dann von Deinem Code aufgerufen werden können. Da eine FGV aus naheliegenden Gründen NICHT reentrant sein kann, ist damit auch automatisch gewährleistet dass die Variable die darin abgespeichert ist nicht einfach durch einen zweiten parallelen Aufrufe der FGV unbootmässig beeinflusst wird, denn LabVIEW serialisiert SubVI Aufrufe auf nicht reentrante VIs automatisch.

2) Speicherverbrauch

JEDES Lesen und Schreiben kopiert den vollen Inhalt der Variablen. Das ist kein Problem bei Skalaren oder kleinen Arrays, aber geht sowohl in Speicherverbrauch als auch CPU Zeit doch in die Zahlen wenn Du das auf grosse Datenarrays anwendest.

Nimm auch hier voriges Beispiel einer Veränderung der abgespeicherten Daten mit anschliessendem Zurückschreiben. Wenn es sich hier um ein grosses Array handelt, hast Du durch die doppelte Kopie der Daten sowohl beim Lesen als auch Schreiben jeweils eine ziemliche Speicherauslastung als auch CPU Zeit. Diese grössere CPU Zeit vergrössert zudem das Zeitfenster in dem ein paralleler Zugriff auf die Daten eine Race Condition verursachen kann.

Wenn Du für die Manipulation der Daten eine Methode in der FGV machst die diese Manipulation innerhalb der FGV vornimmt, hast Du je nach Operation der gewünschen Manipulation die Chance, dass zumindest eine der zwei Datenkopien ganz entfällt und bei Operationen die LabVIEW sogenannt Inplace machen kann, entfällt gar jegliches Datenkopieren.

Grundsätzlich ist zu sagen dass eine FGV die NUR eine Get und Set Methode enthält genauso schrecklich ist wie eine Globale, mit denselben Nachteilen und Problemen. Eine FGV wird dann aber interessant wenn Du bestimmte Operationen auf die globalen Daten definieren kannst und diese als Methode in der FGV implementierst. Im Idealfall hat eine FGV keine eigentliche Get und Set Methode.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
RE: Programmbearbeitung durch globale Variablen erheblich langsamer? - rolfk - 07.06.2012 11:06

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Extrem langsamer Variablen Zugriff über Referenzen hajos118 12 3.847 01.08.2022 17:20
Letzter Beitrag: BNT
  Globale Variablen Edi70 7 3.277 08.10.2021 17:01
Letzter Beitrag: GerdW
  Boolean als globale Variable ares2013 12 9.891 06.09.2019 13:57
Letzter Beitrag: GerdW
  globale Konstanten? Nordvestlys 6 5.128 20.02.2015 09:35
Letzter Beitrag: Nordvestlys
  Globale Variable mit Excel Banick 5 5.813 29.01.2014 11:44
Letzter Beitrag: Banick
  FGV Funktionale Globale Variable cabua 30 48.848 08.11.2013 10:33
Letzter Beitrag: mate Ria

Gehe zu: