LabVIEWForum.de
Performance-Frage: Große Arrays in Cluster-Schieberegister - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Performance-Frage: Große Arrays in Cluster-Schieberegister (/Thread-Performance-Frage-Grosse-Arrays-in-Cluster-Schieberegister)

Seiten: 1 2 3


Performance-Frage: Große Arrays in Cluster-Schieberegister - Matze - 26.07.2010 09:34

Guten Morgen,

ich verwende für mehrere parallele Messungen Schieberegister. Angeschlossen sind jeweils Cluster, die u.a. 2 Arrays mit Double-Messwerten beinhalten und die ich in einer Schleife fortlaufend fülle.

Über das Tool "Leistung und Speicher" konnte nicht feststellen, was genau lange benötigt, aber mit zunehmender Messzeit wird mein Programm langsamer.
Da ich mehrere Werte setzen/auslesen muss, habe ich als Schieberegister den Cluster gewählt, auch wenn ein direktes Array-Schieberegister vermutlich schneller wäre.
Da ist mir der Verdrahtungsaufwand allerdings zu hoch.

Ist mein Vorgehen mit den Clustern für viele Messwerte (die Arrays könnten je ca. 20.000 Werte fassen) zu empfehlen oder geht es schneller (Referenzen o.ä.)?

Die Messwerte füge ist fortlaufend über "Array erstellen" (Eingänge verknüpfen) hinzu. Das wird generell nicht empfohlen, da dies langsam ist und laufend Werte hin und her kopiert werden müssen. Nur ist mir die genaue Werteanzahl unbekannt, weshalb ich von vornherein kein Array initialisieren kann, bei dem ich dann die Werte nur noch ersetze.
Ich vermute zumindest, dass bei der Cluster-Array-Geschichte die Ursache liegt.

[attachment=28179]


Performance-Frage: Große Arrays in Cluster-Schieberegister - jg - 26.07.2010 09:47

Hallo,
im Prinzip weißt du, wo dein Problem liegt, und hast es auch schon beschrieben, nämlich die Build-Array-Funktion:
' schrieb:Die Messwerte füge ist fortlaufend über "Array erstellen" (Eingänge verknüpfen) hinzu. Das wird generell nicht empfohlen, da dies langsam ist und laufend Werte hin und her kopiert werden müssen.
Das braucht Zeit. Wobei jetzt 20.000 Werte noch nicht das Riesen-Array ist.
' schrieb:Nur ist mir die genaue Werteanzahl unbekannt, weshalb ich von vornherein kein Array initialisieren kann, bei dem ich dann die Werte nur noch ersetze.
Kannst du vielleicht mit einer Maximalgröße des Arrays arbeiten? z.B. 50.000 Werte, die zu Beginn mit "NaN" vorbelegt sind?

Von Referenzen auf Controls oo.ä. rate ich ab, das ist garantiert langsamer.

Ob eine Data Value Reference (neu seitLv09_img2) was bringt, kann ich nicht sagen, habe das noch nie gebraucht:
[attachment=28180]

Gruß, Jens


Performance-Frage: Große Arrays in Cluster-Schieberegister - Matze - 26.07.2010 10:14

Hallo Jens,

genau diese Referenz meine ich (Data Value).
Ich denke schon, dass ich das Array vorbelegen könnte. Darf ich denn dann auf "NAN" prüfen, um das Ende des Arrays festzustellen oder wie geht man hier vor?


Performance-Frage: Große Arrays in Cluster-Schieberegister - GerdW - 26.07.2010 10:21

Hallo Mechatroniker,

wenn du die Arrays mit NaN vorbelegst, kannst du schlecht mit NaN auf Arrayende prüfen... Oder wie meinst du das?

Pack dir doch einfach einen Datencounter mit in den Cluster. Dort merkst du dir, wieviele Elemente schon ins Array geschrieben wurden und addierst die neuen Elemente einfach dazu. Bei Überlauf ("Array voll") musst du dann alte Einträge überschreiben...


Performance-Frage: Große Arrays in Cluster-Schieberegister - SeBa - 26.07.2010 10:26

Während Andere bereits geantwortet haben, hab ich gemütlich einen Kaffee geschlürft und mal was zusammengeklickt.

Daher wurden die Grundelemente ggf. bereits erwähnt.

-> Array mit Size X und NaN vorbelegen, Array Replace nutzen, per Index Counter merken wo im Array man ist,

-> das Array erweitern, falls der Counter nahe dem ArraySize

Lv09_img2[attachment=28189]

[attachment=28188]


Gruß SeBa


Performance-Frage: Große Arrays in Cluster-Schieberegister - Matze - 26.07.2010 10:27

Hallo Gerd

' schrieb:wenn du die Arrays mit NaN vorbelegst, kannst du schlecht mit NaN auf Arrayende prüfen... Oder wie meinst du das?
Array-Ende war falsch ausgedrückt. Ich meinte das Ende der eingetragenen Messwerte. ALso ab wann das 1. Mal NAN enthaten ist.
Aber stimmt, ich könnte die Werte auch nebenher hochzählen.

Was mir fast lieber wäre, wenn ich das Array Stück für Stück vergrößern kann.
Zu Beginn z.B. mit Länge 2000. Wenn die Anzahl der Messwerte 2000 übersteigt, wird die Länge auf 4000 gesetzt.

Nachtrag @SeBa: Danke, das muss ich erstmal auf mich einwirken lassen. Big Grin


Performance-Frage: Große Arrays in Cluster-Schieberegister - abrissbirne - 26.07.2010 10:29

' schrieb:Was mir fast lieber wäre, wenn ich das Array Stück für Stück vergrößern kann.
Zu Beginn z.B. mit Länge 2000. Wenn die Anzahl der Messwerte 2000 übersteigt, wird die Länge auf 4000 gesetzt.
Da sehe ich eine potenzielle Fehlerquelle, wenn deine Applikation lange laufen soll. Da LV den Speicher am Stück allokieren muss und dein RAM eventuell schon zu fragmentiert ist, kann es sein dass LV keinen Speicher mehr am Stück erhält und die ganze Sache geht in die Hose.


Performance-Frage: Große Arrays in Cluster-Schieberegister - macmarvin - 26.07.2010 10:32

Soll es denn ein endlicher Puffer für eine Messung oder ein Ringpuffer sein?


Performance-Frage: Große Arrays in Cluster-Schieberegister - Matze - 26.07.2010 10:35

Hallo

@abrissbirne: Hm, das könnte sein. Wobei SeBas Lösung genau das macht, wenn ich das richtig sehe.
@macmarvin: Der Puffer soll endlich sein.

Ich erfasse zuerst sämtliche Werte und speichere diese z.B. anschließend in einer Datei oder werte sie aus.


Performance-Frage: Große Arrays in Cluster-Schieberegister - GerdW - 26.07.2010 10:40

Hallo Mechatroniker,

wenn der Puffer endlich sein soll, warum willst du ihn dann stückweise (mit den dir bekannten Nachteilen) anlegen?