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, 11:38
Beitrag #11

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
Speicherallozierung - 1D/2D/3D-Arrays
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?

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.08.2009, 12:02
Beitrag #12

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Speicherallozierung - 1D/2D/3D-Arrays
' schrieb:Hmm, ein 2D Array mit 8 Kanalen a 1MS verbraucht genau 8 * 10^6 * 8 + 8 Bytes und noch etwa 16 Byte LabVIEW Handle overhead (~64'000'024 Bytes). Ein 1D Array das dieselben Daten enthalten kann würde 8 * 10^6 * 8 + 4 Bytes und den LabVIEW handle overhead belegen (~64'000'020 Bytes). Beides ist ein kontinuierlicher Bereich im Speicher. Es erscheint mir sehr unwahrscheinlich dass die 4 Bytes Unterschied einen merkbaren Unterschied darstellen! Big Grin

Das Problem ist nicht 2D, 3D oder nD Arrays sondern der einfache Fakt dass mit solchen Arrays sehr schnell sehr viel Speicher alloziert werden muss ohne dass der Benützer das direkt sieht. Aber der Trick um alles in ein 1D Array zu stopfen bringt nichts wenn man die gleichen Daten darin haben will. Der einzige Vorteil liegt darin, das man dazu erst wirklich gut nachdenken muss und schnell sieht dass das enorme Daten ergibt und dadurch vielleicht gezwungen wird das ganze Design zu überdenken.

Rolf Kalbermatter
Ok, das hört sich ja logisch an, aber warum bekomme ich einen Error (Not enough Memory) wenn ich ein 3D-Array benutze und mit einem 1D-Array nicht? Das kapiere ich nicht wirklich.

Gruß, Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
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
15.12.2009, 10:20
Beitrag #14

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Speicherallozierung - 1D/2D/3D-Arrays
' schrieb:Irgendwo habe ich gelesen, dass LV Speicher nur am Stück allokieren kann. Wie LV darin den Speicher verwaltet weiß ich glaube dir, dass die von dir genannte Methode besser klappt. Eigentlich auch logische, denn die Array innerhalb der Clusterelemente können unterschiedlich groß sein. LV kann somit keinen aneinanderhängenden Speicher belegen sondern setzt nur einen Pointer auf das Array rein. Wie LV dann vorgeht, um dieses Array zu speichern, weiß ich nicht. Es kann allerdings nicht irgendwo im Speicher liegen, da LV wie gesagt nur einen Bereich verwalten kann.
Um nochmal das Thema aufzugreifen. Letzte Woche war ich bei NI und habe mit einigen Dozenten über das Thema großer Datensätze in LabVIEW diskutiert. NI verwies mich auf den Kurs Performance Guide, wo eine Methode vorgestellt wird, um herauszufinden wie groß der größte zusammenhägende Speicher momentan beträgt. Dazu muss man sich bei Microsoft etwas herunterladen, leider konnte mir der Dozent nicht sagen was. Hat von euch jemand diesen Kurs besucht und weiß was man sich herunterladen muss?

THX
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.12.2009, 11:21
Beitrag #15

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Speicherallozierung - 1D/2D/3D-Arrays
Hi Abrissbirne,

habe den Kurs im Frühling besucht - leider wurde diese "Methode" nicht erwähnt. Zumindestens nicht in meinem Kurs... Oder kann sich evtl. Y-P dran erinnern?

Grundaussage des Kurses: Je einfacher die Datenstruktur gehalten wird, desto besser die PerformanceSmile

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.12.2009, 11:45
Beitrag #16

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
Und wie jede Grundaussage ist es einfach das, eine Grundaussage. Im Prinzip meist korrekt aber nicht in allen Fällen und unter allen möglichen Umständen.

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
Anzeige
05.02.2010, 11:59
Beitrag #17

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Speicherallozierung - 1D/2D/3D-Arrays
' schrieb:Um nochmal das Thema aufzugreifen. Letzte Woche war ich bei NI und habe mit einigen Dozenten über das Thema großer Datensätze in LabVIEW diskutiert. NI verwies mich auf den Kurs Performance Guide, wo eine Methode vorgestellt wird, um herauszufinden wie groß der größte zusammenhägende Speicher momentan beträgt.
ich denke, das ist dasselbe Thema.
siehe http://www.LabVIEWforum.de/index.php?showt...ost&p=90445

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


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: