26.07.2010, 09:34
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 09:37 von Matze.)
Beitrag #1
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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.
|
|
|
26.07.2010, 09:47
Beitrag #2
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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 seit ) was bringt, kann ich nicht sagen, habe das noch nie gebraucht:
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
26.07.2010, 10:14
Beitrag #3
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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?
|
|
|
26.07.2010, 10:21
Beitrag #4
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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...
|
|
|
26.07.2010, 10:26
Beitrag #5
|
SeBa
LVF-Guru
Beiträge: 2.025
Registriert seit: Oct 2008
09SP1 & 10 FDS
2008
DE
65xxx
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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
Array_dynamicSize.vi (Größe: 31,94 KB / Downloads: 293)
Gruß SeBa
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
|
|
|
26.07.2010, 10:27
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 10:28 von Matze.)
Beitrag #6
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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.
|
|
|
26.07.2010, 10:29
Beitrag #7
|
|
|
26.07.2010, 10:32
Beitrag #8
|
|
|
26.07.2010, 10:35
Beitrag #9
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
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.
|
|
|
26.07.2010, 10:40
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
Hallo Mechatroniker,
wenn der Puffer endlich sein soll, warum willst du ihn dann stückweise (mit den dir bekannten Nachteilen) anlegen?
|
|
|
| |