LabVIEWForum.de
Speicherreduzierung, geht das hier? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Speicherreduzierung, geht das hier? (/Thread-Speicherreduzierung-geht-das-hier)

Seiten: 1 2 3 4


Speicherreduzierung, geht das hier? - Matze - 26.07.2010 13:29

Hallo zusammen,

ich verwede ein SubVI, das ungefähr so aufgebaut ist:

snip09
[attachment=28194]

Ich reiche hier den Cluster "Messdaten" durch das SubVI, damit die Verdrahtung im übergeordneten Blockdiagramm ordentlich ist.

Ich vermute, bei meinem SubVI wird eine Kopie des Clusters erstellt (s. kommentierte Stelle).
Lässt sich das irgendwie vermeiden trotz "Durchreichen" des Clusters?

Oder seht ihr sonst Dinge, die optimiert werden können, was die Verdrahtung bzgl. Speichermanagement betrifft?


Speicherreduzierung, geht das hier? - Ricardo1980 - 26.07.2010 13:32

Hallo,

wenn du das VI auf ablaufinvariant stellst, wird dann nicht nach Abarbeitung der Speicher wieder freigegeben?
Dachte hätte das mal so beobachtet.

Gruß Ricardo


Speicherreduzierung, geht das hier? - GerdW - 26.07.2010 13:33

Hallo Mechatroniker,

solange du nur Werte aus dem Cluster liest, legt LabVIEW nicht notwendigerweise eine Kopie an...

Wenn du aber den Cluster bearbeiten willst, kann das durchaus passieren. Aber wozu gibt es die InPlace-Struktur, die du ja schon kennst (und uns in deinem anderen Thread heute schon gezeigt hast)? Bestimmte Sachen kann man aber nicht "wegoptimieren", z.B. wenn im Cluster Arrays enthalten sind, die sich durch deine Operation vergrößern...


Speicherreduzierung, geht das hier? - abrissbirne - 26.07.2010 13:45

Du machst sogar zwei kopien. Eine Kopie entsteht mit jedem Drahtabzweig.


Speicherreduzierung, geht das hier? - Matze - 26.07.2010 13:50

Hallo,

mir geht's weniger ums Freigeben, als über den Verbrauch generell bzw. damit verbunden auch die Performance. Ich möchte möglichst ohne Kopien auskommen.

' schrieb:Du machst sogar zwei kopien. Eine Kopie entsteht mit jedem Drahtabzweig.
Wirklich? Auch wenn ich nur auf einen einzelnen Cluster-Wert zugreife, wird der gesamte Cluster-Inhalt kopiert?


Speicherreduzierung, geht das hier? - macmarvin - 26.07.2010 13:54

Probiers doch mal so:
[attachment=28196]

afaik ist LV beim Erkennen von komplett durchverdrahteten Datendrähten durch Casestrukturen ziemlich gut.


Speicherreduzierung, geht das hier? - Matze - 26.07.2010 14:07

Danke. Ich habe gelesen, man soll Werte nur durch Case-Strukturen führen, wenn man sie dort benötigt. Daher habe ich es außerhalb gelöst.
Wobei beide Lösungen laut dieser Pufferzuweisungsanzeige auf das gleiche raus kommen, wenn ich das richtig sehe.

Dann würde ich sagen, dass nur am Eingang des SubVIs der Cluster kopiert wird.

Eigentlich schade, dass dies bei SubVIs immer der Fall ist, denn sonst sehe ich ihn ihnen nur Vorteile. Bzgl. Performance sind SubVIs daher etwas suboptimal, aber ohne wäre die Wartbarkeit der Blockdiagramme nicht gegeben.


Speicherreduzierung, geht das hier? - abrissbirne - 26.07.2010 14:09

So wärs am Besten denke ich.


Speicherreduzierung, geht das hier? - GerdW - 26.07.2010 14:16

Hallo Mechatroniker,

"Dann würde ich sagen, dass nur am Eingang des SubVIs der Cluster kopiert wird. Eigentlich schade, dass dies bei SubVIs immer der Fall ist,"

Falsch, diese Kopie kann man durch Setzen der ExecutionPriority auf "Subroutine" vermeiden...


Speicherreduzierung, geht das hier? - Matze - 26.07.2010 14:25

Hallo

@abrissbirne: Hm, dann werden bei jedem Aufruf die Messwerte kopiert, obwohl ich diese nur benötige, wenn "Ende Messung" true ist.
@Gerd: Huch, wieder was gelernt. Dann wundert mich, dass dies nicht das Standardverhalten ist. Ich wüsste keiner meiner SubVIs, bei denen ich mit der Kopie arbeiten muss.
Gerade bei großen Daten werde ich die Priorität entsprechend setzen, dankeschön.Smile