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 

SubVi performance bei großen Datenstrukturen



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!

26.11.2009, 23:04
Beitrag #1

soranito Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Dec 2008

10.0
2005
DE

89073
Deutschland
SubVi performance bei großen Datenstrukturen
Hallo zusammen,

in meiner Problemstellung habe ich mit großen arrays zu tun, möchte den Code aber einigermaßen sinnvoll strukturieren, sprich: SubVis verwenden. Damit LabVIEW nicht jeweils beim Betreten und Verlassen des SubVis eine Kopie der Daten erstellt, dadurch bei jedem Aufruf mehrere MB kopiert und so die Performance bzw. den verfügbaren Arbeitsspeicher "tötet", verwende ich den Ausführungsmodus Unterprogramm (Eigenschaften für Vi->Ausführung->Priorität->Unterprogramm).

Mein Problem ist nun, dass bei diesem Ausführungsmodus kein Debugging verfügbar ist und asynchrone Knoten verboten sind (z.B. Queues, teilweise Events). Gibt es eine andere Möglichkeit, effizient Arrays mittels SubVis zu verarbeiten und dennoch asynchrone Knoten verwenden zu können?
In LabVIEW 9 dürfte dieses Problem mit Datenreferenzen lösbar sein, leider arbeiten wir noch mit LV 8.6.

Schöne Grüße,
soranito
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.11.2009, 23:31
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
SubVi performance bei großen Datenstrukturen
Was für Events sollen nicht funktionieren? Und wieso kannst Du keine Queue in einer Subroutine (Englischer Begriff Deiner Ausführungsart) erstellen? Ich habe versucht eine Queue zu erstellen und das hat funktioniert. O
Ansonsten sind Subroutines gar keine so schlechte Sache, zwar nicht so schnell, wie Primitives, aber wesentlich schneller, als ein normales SubVI (je nachdem, was damit gemacht werden soll). Auf dem Performance-Guide gab's einen netten Benchmark mit Subroutines und einem normalen SubVI.
Kannst Du mal Dein Bsp. hochladen und sagen, um was für Größenordnungen es bei Deinem Array geht?

Gruß Markus

PS: Bitte Profil_ergaenzen. Da steht noch LabVIEW 8.2 drin und Du hast ja jetzt anscheinend schon LabVIEW 8.6.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.11.2009, 02:49
Beitrag #3

soranito Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Dec 2008

10.0
2005
DE

89073
Deutschland
SubVi performance bei großen Datenstrukturen
Hallo Markus.
Du hast recht: Queue erstellen funktioniert, aber in Queue schreiben und Queue lesen funktionieren nicht. Bei Ereignissen war ich auch etwas ungenau: Es funktionieren "Benutzerereignis erzeugen", "Benutzerereignis erstellen", aber Ereignisstrukturen sind verboten. Ein weiteres Problem ist, dass in einem Unterprogramm nur VIs verwendet werden dürfen, die ebenfalls den Typ Unterprogramm haben. Schließlich kommt noch dazu, dass in Unterprogrammen der Debugger nicht funktioniert.

Im Augenblick geht es mir nicht direkt um die Lösung einer konkreten Problemstellung, sondern eher um die generelle Möglichkeit, Code mit Hilfe von SubVIs zu strukturieren wobei ich einerseits Performanceeinbrüche bei großen Datenmengen vermeiden möchte und andererseits alle Möglichkeiten zur Verfügung haben, die ich hätte, wenn ich komplett auf SubVis verzichte.

Das mit dem konkreten Beispiel könnte auch etwas kompliziert werden, da das array in einem ziemlich umfangreichen Projekt die Rolle des zentralen Puffers übernimmt. Ich habe den Post vor allem deshalb erstellt, da es mir schon öfters passiert ist, dass ich sehr große Datenstrukturen habe (z.B. Filme), in denen z.B. nur ein Frame manipuliert werden soll, das aber oft hintereinander und jedesmal wird der komplette Puffer kopiert. In jeder anderen ernsthaften Programmiersprache gibt es neben dem in LabVIEW typischen Call-By-Value (also kopieren der Daten) Call-By-Reference (lediglich übergabe eines Zeigers) - ich dachte mir einfach, diese Möglichkeit MUSS es bei einer über 20 Jahre alten Programmiersprache auch geben.


Du hattest primitives erwähnt. Sehe ich das richtig, dass damit eingebaute Funktionen wie z.B. "Teil-Array ersetzen" bezeichnet werden? Gibt es etwa eine Möglichkeit, solche primitves auch selbst zu erstellen?

Schöne Grüße,
Matthias

P.S.: Danke für den Hinweis (8.2->8.6)Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.11.2009, 09:46
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
SubVi performance bei großen Datenstrukturen
' schrieb:In jeder anderen ernsthaften Programmiersprache gibt es neben dem in LabVIEW typischen Call-By-Value (also kopieren der Daten) Call-By-Reference (lediglich übergabe eines Zeigers) - ich dachte mir einfach, diese Möglichkeit MUSS es bei einer über 20 Jahre alten Programmiersprache auch geben.
Die Frage ist, ob es Intension von LabVIEW ist, auch Call-By-Reference auf oberster Ebene zuzulassen. Streng genommen widerspricht das nämlich dem Datenflußprinzip (RaceConditions!).

Du hast aber jederzeit die Möglichkeit einer eigenen (c++ etc.) DLL, um z.B. performance-sensible Berechnungen zu machen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.11.2009, 09:48
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
SubVi performance bei großen Datenstrukturen
' schrieb:In LabVIEW 9 dürfte dieses Problem mit Datenreferenzen lösbar sein,
Wenn das das ist was du willst und ich meine: Wie kommt du darauf, dass das in LV9 geht?

Kann das einer bestätigen? Dass da ein Unterschied ist zwischen 90 und 86? Ich selbst hab's jetzt noch nicht probiert.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.11.2009, 11:53
Beitrag #6

soranito Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Dec 2008

10.0
2005
DE

89073
Deutschland
SubVi performance bei großen Datenstrukturen
' schrieb:Wenn das das ist was du willst und ich meine: Wie kommt du darauf, dass das in LV9 geht?

Kann das einer bestätigen? Dass da ein Unterschied ist zwischen 90 und 86? Ich selbst hab's jetzt noch nicht probiert.

Ich habe es auf http://www.ni.com/LabVIEW/whatsnew/d/features.htm gelesen: "Seit LabVIEW 7.1"->Datenreferenzen. Unter dem dort angegebenen Link (der bei mir heute leider einen Server-Error gibt), war noch vor kurzem ein Tutorial erreichbar, in dem die Verwendung von Datenrefenzen unter LV9 genauer beschrieben wurde.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.11.2009, 12:05
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
SubVi performance bei großen Datenstrukturen
Offtopic2
' schrieb:(der bei mir heute leider einen Server-Error gibt),
So-nebenbei-Bemerkung der Hotline(die ich heute morgen um 9°° in einer anderen Angelegenheit befragt habe) zu dem Serverausfall in USA: "Ach, in einer Stunde geht das wieder". War wohl ein Kaufmann.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
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
  Änderung von großen Cluster (Type Def.) führt zu out of Memory exeption spacz 8 6.566 28.10.2019 09:01
Letzter Beitrag: spacz
  Probleme mit Performance (Berechnungen und Grafik) catbull 5 4.657 21.07.2018 10:13
Letzter Beitrag: IchSelbst
  Performance beim Betrieb über WLAN Heber 9 5.852 22.08.2017 14:28
Letzter Beitrag: Heber
  Datenstrukturen mit Nebeneffekt - Referenzen - wie geht es? buechling 12 7.923 16.01.2015 14:02
Letzter Beitrag: macmarvin
  Gutes LV Design bei großen Programmen elhorst 31 20.904 18.09.2014 06:31
Letzter Beitrag: elhorst
  Melder Performance D_Sev 13 11.089 08.09.2014 10:56
Letzter Beitrag: GerdW

Gehe zu: