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 

Werden bei SubVI-Aufrufen immer Datenkopien angelegt?



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!

13.02.2011, 18:28
Beitrag #1

Thomasschoenau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Feb 2007

8.2, 2010 SP1
2006
EN


Deutschland
Werden bei SubVI-Aufrufen immer Datenkopien angelegt?
Hallo,

ich habe in LabView 8.2 ein VI geschrieben, welches einen Teil eines Arrays glättet. Man übergibt also das Array, einen Startindex und eine Länge und das VI gibt das Array zurück, wobei eben der angegebene Bereich geglättet ist.
Intern läuft es so, daß aus dem Eingangs-Array der zu glättende Teil extrahiert wird (Sub-Array) und am Schluss mit Replace Array Subset die ursprünglichen Daten durch die neuen Daten ersetzt werden.
Nun ist mir aufgefallen, daß das VI extrem langsam wird, wenn das zu übergebende Array lang wird. Dabei sollte die Länge des Arrays für die Rechenzeit keine Rolle spielen! Denn von Interesse für den Algortihmus ist nur die Länge des zu glättenden Intervalls, und die ist in diesem Fall konstant und gering (einige Messpunkte).
Ich habe mir daraufhin alle Buffer-Allocationen anzeigen lassen und habe bemerkt, daß scheinbar beim Übergeben des Arrays ins VI ein Buffer alloziert wird (siehe Anhang). Da das Array einige Millionen Messpunkte enthalten kann, kann dies Speicher- und Geschwindigkeitsprobleme mit sich bringen. Alle anderen Allocationen haben nur die Länge des zu glättenden Intervalls (einige Messpunkte) und sind somit nicht kritisch!

Ich wollte nun fragen, ob es bei Labview Standart ist, daß von Arrays bei der Übergabe an (Sub-)VIs Kopien angelegt werden. Ich kenne das aus den Standart-Programmiersprachen so, daß Arrays immer per Referenz übergeben werden. Lässt sich das in LabView 8.2 auch irgendwie realisieren? Gibt es da irgendwo eine Option im Compiler oder bei den VI-Einstellungen?

Zur Not kann ich zwar einen Workaround machen, indem ich nur den zu glättenden Teil an das VI übergebe (ich habe das schon probiert, es ist deutlich schneller), doch irgendwie möchte ich mich nicht damit abfinden, daß jedes VI Kopien der Arrays anlegt.

Danke für die Antworten!!!
Thomas


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Nachrichten in diesem Thema
Werden bei SubVI-Aufrufen immer Datenkopien angelegt? - Thomasschoenau - 13.02.2011 18:28

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Nur ein SubVI in Whileschleife soll verzögert werden mikadm 2 3.475 12.08.2020 14:54
Letzter Beitrag: mikadm
  Werte aus SubVI werden nicht aktualisiert McButch 24 13.383 13.10.2016 14:20
Letzter Beitrag: jg
  Referenzen in Variable speichern und in SubVI aufrufen Hasenfuss 16 12.771 30.04.2015 08:09
Letzter Beitrag: Hasenfuss
  Histogramme werden nicht immer aktualisiert, obwohl Autoskalierung aktiv ist dali4u 3 3.678 27.11.2014 16:56
Letzter Beitrag: GerdW
  SubVI immer im Vordergrund StabSH 9 11.968 07.12.2012 09:30
Letzter Beitrag: Keppi
  Button reagiert nur beim ersten Aufrufen der SubVI c_Kay 8 6.707 12.10.2012 15:40
Letzter Beitrag: c_Kay

Gehe zu: