LabVIEWForum.de
In Place bei variablen Array-Längen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: In Place bei variablen Array-Längen (/Thread-In-Place-bei-variablen-Array-Laengen)



In Place bei variablen Array-Längen - D_Sev - 10.02.2014 14:38

Ich stelle mir grad die Frage ,was eine InPlace-Struktur nutzt, wenn diese auf ein Array angewand wird bei dem sich die Länge ändern kann (siehe Bild).


Ist es so, dass für eine Array erst einmal eine bestimmte Länge allokiert wird - und sollte diese dann doch überschritten werden, wird die InPlace-Struktur hinfällig und es wird eine Kopie erzeugt?

Oder wird per se eine Kopie erzeugt?

Oder was anderes ?


RE: In Place bei variablen Array-Längen - GerdW - 10.02.2014 14:51

Hallo D_Sev,

das gezeigte Beispiel ist etwas irreführend:
Die InPlace-Struktur bezieht sich auf den Cluster und nicht auf das darin enthaltene Array!

Der Cluster selbst wird (nach Möglichkeit) "in place" bearbeitet.
Wenn sich das enthaltene Array aber längenverändert, dann muss der LV-interne Memorymanager tätig werden.


RE: In Place bei variablen Array-Längen - D_Sev - 10.02.2014 15:12

Wenn ich also nun wollte, dass der Memorymanager nicht tätig wird, müsste ich das Array mit der richtigen Länge vorinitialisieren ?

Allokiert der Memorymanager nicht immer einen gewissen Sicherheitspuffer mit ? Denknach


Was wäre, wenn ich das Array mit 10 Elementen initialisiere - dann aber nur ein Array mit 5 Elementen reinstecke? Dann wird er mir doch wohl nicht extra eine Kopie erzeugen oder?


RE: In Place bei variablen Array-Längen - GerdW - 10.02.2014 15:18

Hallo D_Sev,

Zitat:dass der Memorymanager nicht tätig wird, müsste ich das Array mit der richtigen Länge vorinitialisieren ?
Ja.

Zitat:Allokiert der Memorymanager nicht immer einen gewissen Sicherheitspuffer mit ?
Ja.

Zitat:Was wäre, wenn ich das Array mit 10 Elementen initialisiere - dann aber nur ein Array mit 5 Elementen reinstecke? Dann wird er mir doch wohl nicht extra eine Kopie erzeugen oder?
Dann wird der MemoryManager wohl weiterhin den gleichen Speicherblock für dein Array weiterverwenden...


RE: In Place bei variablen Array-Längen - Kiesch - 14.02.2014 08:50

Gibt es eigentlich eine Möglichkeit einzelne Elemente des Arrays in dem Cluster in place zu bearbeiten?

Wenn man einfach eine zweite in Place Struktur "innenliegend" nimmt dürfte ja erst das Array in Place setzen, dann aber anschließend komplett das ganze Array überschreiben wenn ich das auf der Äußeren setzen lasse. Richtig? Wie würde ich sowas dann also sinnvollerweise machen?

Gruß Kiesch

P.S: Hatte das Problem genau in der Art (Array in Cluster wo bei dem Array nur ein Element angefasst werden soll (und die Größe konstant bleibt), das aber sehr oft) letztens und habs letztlich umgangen indem ich den Cluster beseitigt habe.


RE: In Place bei variablen Array-Längen - GerdW - 14.02.2014 08:52

Hallo Kiesch,

einfach Strukturen schachteln:
[attachment=48515]


RE: In Place bei variablen Array-Längen - Kiesch - 14.02.2014 09:26

Ach das funktioniert doch? Hätte gedacht da überschreibt er dann in der äußeren IP Struktur das komplette Array. Bei LV ist man ja eigentlich immer auf der sicheren Seite wenn man von ausgeht das er eher ne Kopie mehr macht als eine zu wenig Big Grin

Heißt also unterm Strich quasi:

Mit der IP Struktur arbeite ich de facto mit Referenzen auf ein Wire?


RE: In Place bei variablen Array-Längen - GerdW - 14.02.2014 09:29

Hallo Kiesch,

mit der InPlace-Struktur weist du den Compiler an, die betreffenden Daten ja eben in place zu bearbeiten!

Nach dem, was man im NI-Forum so liest, ist die InPlace-Struktur aber auch überbewertet - zumindest in den aktuellen LV-Versionen. Durch Änderungen am Compiler werden auch "IndexArray/ReplaceArraySubset"- oder "UnBundle/Bundle"-Kombinationen sehr gut als in place-Operation erkannt und ausgeführt. Bei meinen letzten Zeitmessungen schnitt die InPlace-Struktur meist langsamer ab als eine gleichwertige IndexArray/ReplaceArraySubset-Kombination…


RE: In Place bei variablen Array-Längen - Kiesch - 14.02.2014 14:49

Sehr erhellend. Danke :-)

*edit* Ach mist und leider kann ich als nicht Thread ersteller nicht bedanken. Wie doof