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 

Speicherallozierung - 1D/2D/3D-Arrays



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!

11.08.2009, 12:04 (Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2009 11:59 von rolfk.)
Beitrag #13

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Speicherallozierung - 1D/2D/3D-Arrays
' schrieb:Aber wie sieht jetzt mit denen vno unicorn beschriebenen Arrays aus? Also ein 1D-Array aus cluster mit 2D-Arrays. Landen die auch am Stück im Speicher oder hat LV hier die Möglichkeit, die 2D-Arrays besser im Speicher zu verteilen?

Jedes Array in LabVIEW ist ein Handle (Pointer auf einen Pointer). Was Du also bei mehreren Arrays in einem Cluster erhältst, sind seperate Arrays und damit auch seperate Speicherbereiche. Grundsätzlich ist das sicher einfacher für den Memorymanager da die Chance dass genügend individuelle Speicherlöcher bestehen die gross genug sind für jedes der einzelenen Arrays, grösser ist.

Aber die Lösung hat auch Nachteile. Jedes Array hat einen Overhead in LabVIEW (und nochmals im OS) da das auch Informationen über jeden Pointer verwalten muss. Das sind zwar nur etwa 100 Bytes oder so aber das kann mit der Zeit doch zählen. Zudem verwendet auch der Cluster selber nochmals einen Speicherbereich was auch nicht soviel auf einmal ist aber doch auch wieder so um die 32 Bytes plus den Speicherpointeroverhead von LabVIEW und dem OS. Und nicht zu vergessen die Speicherdeskriptoren die auch nur endlich sind, vor allem bei Verwendung des /3GB boot.ini Switches.

Der grösste Nachteil ist aber dass Du auf diese Weise schnell ein unübersichtliches Diagramm bekommst, da Du für jede Operation auf eines der Arrays ein Unbundle benötigtst, dann die Arrayoperation und dann wieder ein Bundle. Auch wird es umständlicher um Inplaceness zu erhalten, weil das nur noch durch die entsprechenden Inplaceoperatoren in LabVIEW 8.6 zu erreichen ist. Ohne Inplaceoperationen bricht Dir die Performance schrecklich zusammen.

Und nicht zu vergessen dass eine solche Lösung überhaupt nicht scalierbar ist. Ein extra Kanal hinzufügen? Au Backe, dann muss ich den Cluster ändern, alle VIs die darauf angewendet werden anpassen und so weiter!!!!

Bei einer reinen 2D Arraylösung die sauber programmiert ist setze ich die Funktion die die Daten acquiriert einfach so dass Sie einen Kanal mher einliest und alles andere geht automatisch. Eventuel muss im UI noch etwas angepast werden um den extra Kanal auch einstellbar zu machen und darzustellen (Grpahenlegende zum Beispiel). Aber das ist es dann schon.

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
Speicherallozierung - 1D/2D/3D-Arrays - rolfk - 11.08.2009 12:04

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Auswahl eines Arrays anhand des Wertes eines zweiten Arrays treffen alan 2 4.596 19.02.2015 16:12
Letzter Beitrag: alan
Bug Arrays... immer wieder Arrays nurso 6 7.513 15.08.2014 10:39
Letzter Beitrag: Lucki
  Array of Cluster(Arrays) nach Cluster(Concatenate Arrays) rasta 7 9.786 18.12.2008 12:33
Letzter Beitrag: rasta

Gehe zu: