26.07.2010, 13:29
Beitrag #1
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Speicherreduzierung, geht das hier?
Hallo zusammen,
ich verwede ein SubVI, das ungefähr so aufgebaut ist:
snip09
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?
|
|
|
26.07.2010, 13:32
Beitrag #2
|
Ricardo1980
Unregistered
|
Speicherreduzierung, geht das hier?
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
|
|
|
26.07.2010, 13:33
Beitrag #3
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Speicherreduzierung, geht das hier?
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...
|
|
|
26.07.2010, 13:45
Beitrag #4
|
|
|
26.07.2010, 13:50
Beitrag #5
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Speicherreduzierung, geht das hier?
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?
|
|
|
26.07.2010, 13:54
Beitrag #6
|
|
|
26.07.2010, 14:07
Beitrag #7
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Speicherreduzierung, geht das hier?
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.
|
|
|
26.07.2010, 14:09
Beitrag #8
|
|
|
26.07.2010, 14:16
Beitrag #9
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Speicherreduzierung, geht das hier?
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...
|
|
|
26.07.2010, 14:25
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 14:26 von Matze.)
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Speicherreduzierung, geht das hier?
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.
|
|
|
| |