26.07.2010, 10:54
|
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
' schrieb:@abrissbirne: Hm, das könnte sein. Wobei SeBas Lösung genau das macht, wenn ich das richtig sehe.
Stimmt schon. Hab aber auch nicht behauptet, dass die Lösung das Non+Ultra ist.
Ich hab nur "dynamic Array Size" zwischen deinen Zeilen gelesen... und neugierig wie ich bin, wollt ich halt wissen ob/wie's funktionieren kann.
Und da ich solche Dinge gerne Teile, hab ichs halt auch hochgeladen.
Also lass den Quatsch lieber und benutz nur den Index Counter, das Replace Array und beleg dein maximal großes Array vorher mit NaN.
Das erste NaN kannst du ja mit 1D-Array durchsuchen finden.
Wobei ich mich dann frage, wenn das Array so groß ist, dass der RAM nicht mehr reicht... klappts ja sowieso nicht. Laufzeit hin oder her.
Natürlich vorrausgesetzt, LV/WinDoof w/e entsorgt die ungebrauchten Teile und räumt ab und zu mal auf? Macht es das? k.A.
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, 11:56
(Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2010 11:58 von Matze.)
|
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
Ich dachte mir, falls eine Messung doch mal länger dauern sollte oder der Puffer zu klein vorbelegt wird, dass dann kein Fehler auftritt und das Array automatisch vergrößert wird.
Wobei ich die max. Array-Größe wie folgt berechnen kann: Rate [Hz] * Timeout[s]
Ob Windows aufräumt, weiß ich nicht. Später sollte das ganze auch auf einem cRIO lauffähig sein.
Named Queues muss ich mir erst mal ansehen. Damit habe ich noch nichts gemacht.
Soll der Queue-Puffer dann für die Messwertspeicherung sein, also die Arrays ersetzen oder wie ist das gemeint?
|
|
|
13.12.2010, 11:10
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
' schrieb:Ja die Messwerte sind dann die Elemente in der Queue. Ohne die Anwendung genau zu kennen, würde ich als Datentyp der Queue DBL (skalar) vorsehen und dann ggf. mehrmals Enqueue aufrufen um das Array reinzuschreiben.
Mal ne Frage: Der Vorteil am BuildArray ist ja der, dass man sich um irgendwelche Speichergrößen keinen Kopf machen muss, LV allokiert von alleine. Klar, die Nachteile sind bekannt...(Array-Kopien).
Wenn ich aber ein wirklich großes Array habe (ich hab hier ne kontinuierliche Abtastung mit 1,25 MS/s für mindestens mal 2-3 Sekunden, aber eben zeitlich nicht genau spezifizierbar, dass hängt ein bisschen von den Umgebungsbedingungen am Prüfstand ab...bis halt ein "Trigger" kommt!)...wie geht man da dann mit Queues um? Wenn ich da jeden Wert einzeln mit "Enqueue" schreibe...das frisst mir doch meine Anwendung auf, oder?
Wie würdet ihr vorgehen?
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
13.12.2010, 12:49
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
Hallo Achim,
man muss ja nicht jeden Wert einzeln in die Queue schieben - 32k-Blöcke tun's doch auch
|
|
|
13.12.2010, 15:34
(Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2010 15:35 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
Seitdem ich festgestellt habe, daß die Funktion "In 1D-Array rotieren" sauschnell ist (- im Gegenatz zu dem, was man da mutmaßen könnte -), sind bei mir komplizierte Ringpufferstrukturen mit Indexzeigern usw. ad acta gelegt. Ebenso auch die hier vorgeschlagene Verwendung von Queues als Rinpuffer-Konstrukt.
Einfaches, ausbaubares Beispiel:
Ringpuffer.vi (Größe: 25,96 KB / Downloads: 282)
|
|
|
13.12.2010, 20:01
|
macmarvin
CLA
Beiträge: 445
Registriert seit: Sep 2006
2014
2004
EN
81373
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
' schrieb:die Funktion "In 1D-Array rotieren" sauschnell ist
Schnell ist die Funktion schon, nur wo liegt der Speicher der damit rotiert wird?
FGVs oder nackte SR sind von der Skalierbarkeit halt recht eingeschränkt.
Flach durchverdrahtet bzw. in größere Datenstrukturen gepackt, ist mitunter schwierig ohne unnötige Kopien zu realisieren.
|
|
|
13.12.2010, 22:26
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Performance-Frage: Große Arrays in Cluster-Schieberegister
' schrieb:Schnell ist die Funktion schon, nur wo liegt der Speicher der damit rotiert wird?
FGVs oder nackte SR sind von der Skalierbarkeit halt recht eingeschränkt.
Flach durchverdrahtet bzw. in größere Datenstrukturen gepackt, ist mitunter schwierig ohne unnötige Kopien zu realisieren.
Mag alles sein, nur benutze ich die Funktion als Rinpuffer für graphische Anzeigen. Da habe ich es nicht mit so großen Datnstrukturen zu tun, und deshalb interessiert mich die Speicherverwendung nicht sonderlich. Ein Diagramm hat typischwereise 1000 Pixel, mehr Datenpunkte sind nicht darstellbar. Wer riesenhafte Datenmengen nicht vor der Visualisierunge entsprechend reduziert, ist selbst schuld wenn er Probleme bekommt. (Hier kann man manches entgegenhalten, z.B. wenn man das Diag hinterher stark zoomen will. Na dann mal los)
|
|
|
| |