10.01.2012, 10:19
Beitrag #1
|
taktbar
LVF-Grünschnabel
Beiträge: 15
Registriert seit: Dec 2011
8.6
2011
DE
|
Speicherbedarf FGV
Hallo!
Ich möchte anhand einer funktionalen globalen Variable eine Audioaufnahme zwischen verschiedenen VIs austauschen.
Prinzipiell funktioniert das ganze auch schon, jedoch wundere ich mich über den hohen Speicherverbrauch.
Die Daten liegen als u16 Werte mit einer Abtastrate von 44100 kHz auf der Festplatte gepuffert vor. Angenommen, ich möchte die letzten 10 Sekunden dieses Puffers auslesen. Somit komme ich auf ein Datenaufkommen von 44100 S/s x 10 s x 2 Byte/S = 882000 Byte. Schiebe ich dieses Array aus 441000 Werten in die FGV, so benötigt diese laut dem "Profile Performance and Memory"-Tool 3533,86 kByte. Das ist ungefähr das vierfache Datenaufkommen.
Kann mir jemand einen Tipp geben, wo dieser Overhead herkommt, bzw. wie ich ihn minimieren bzw. eliminieren kann?
Gruß,
Christian
|
|
|
10.01.2012, 10:23
Beitrag #2
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Speicherbedarf FGV
Hallo Christian,
dazu müsste man deine FGV sehen.
Erster Check:
- Schieberegister braucht Speicher
- Anzeige (=Daten-Ausgang der FGV) braucht Speicher
- alle Datenbuffer korrekt typisiert (als U16)?
- lass dir die Bufferallocations anzeigen...
|
|
|
10.01.2012, 10:36
Beitrag #3
|
|
|
10.01.2012, 10:42
(Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2012 10:42 von GerdW.)
Beitrag #4
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Speicherbedarf FGV
Hallo Christian,
ich würde den Read-Case so machen:
Da wird mir nur eine Bufferallocation für das Schieberegister angezeigt!
Zitat:eine andere Idee
Queues bieten sich immer an, wenn nur ein Consumer bedient werden soll...
|
|
|
10.01.2012, 10:49
Beitrag #5
|
taktbar
LVF-Grünschnabel
Beiträge: 15
Registriert seit: Dec 2011
8.6
2011
DE
|
RE: Speicherbedarf FGV
Da in der Tat nur ein Consumer bedient wird, könnte eine Queue tatsächlich in Frage kommen.
Diesen Ansatz hatte ich bereits auch schonmal in Betracht gezogen, war mir jedoch nicht sicher, ob dieser tatsächlich Speicher einsparen wird. Aber mit den nun gewonnenen Kentnissen, sollte damit wirklich das Aufkommen minimiert werden können.
Ich werde das mit der Queue dann mal näher erörtern!
Danke!
|
|
|
10.01.2012, 15:19
Beitrag #6
|
|
|
12.01.2012, 10:04
Beitrag #7
|
macmarvin
CLA
Beiträge: 445
Registriert seit: Sep 2006
2014
2004
EN
81373
Deutschland
|
RE: Speicherbedarf FGV
(10.01.2012 15:19 )abrissbirne schrieb: Dein Read-Case ist in der Tat suboptimal. LabVIEW ist eine byValue sprache und jeder Drahtabzweig bedeutet eine Datenkopie. Sowie GerdW den Readfall geändert hat, sollte diese unnötige Speicherallozierung behoben sein.
Nein!
Sich die Buffers nur in der FGV selbst anzuschauen reicht meist nicht aus. Auf jeden Fall das Ganze nochmals im Kontext, also in den eigentlichen ZielVIs checken.
Der Buffer aus dem Schieberegister _muss_ nach dem Aufruf der FGV für das/die ZielVIs kopiert worden sein, da LV nicht sicherstellen kann, daß die Daten in der FGV nicht parallel geändert werden. Vom Gesamtspeicherverbrauch geben sich die beiden Versionen deshalb auch nichts. Da könnte mach sogar eher noch zur bedingten Kopierversion argumentieren, wenn es in Zukunft noch Cmds in der FGV gibt, die nicht den gesamten Puffer zurückgeben müssen.
|
|
|
12.01.2012, 10:44
Beitrag #8
|
|
|
12.01.2012, 11:36
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2012 11:39 von macmarvin.)
Beitrag #9
|
|
|
12.01.2012, 14:59
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2012 15:00 von abrissbirne.)
|
|
|
| |