13.06.2014, 15:00
Beitrag #2
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Speicherprobleme LV 2013
Ich finde die Datenmenge deines Clusters schon recht heftig, sind immerhin 480 MB, die du da 1x im Speicher belegst. Und wenn du das noch in ein Array packst, kann es gut sein, dass LabVIEW das als zusammenhängenden Speicherbereich anfordern will, i.e. 2880 MB. Nicht ohne. Und du musst bei solch großen Strukturen höllisch aufpassen, dass durch das Datenfluss-Prinzip von LabVIEW schnell mal Kopien angelegt werden. 1x Frontpanel-Element, Kopie. Einmal ein FlattenToString, um es binär abzuspeichern, Kopie. Einmal nicht sauber in die Datenstruktur reingehen, um ein Element zu ändern, Kopie.
Brauchst du wirklich so viele Zwischenspeicher im RAM?
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.
|
|
|
15.06.2014, 10:44
Beitrag #3
|
rasta
LVF-Gelegenheitsschreiber
Beiträge: 245
Registriert seit: Oct 2006
LabVIEW 2009-2017
2006
EN
53909
Deutschland
|
RE: Speicherprobleme LV 2013
(13.06.2014 15:00 )jg schrieb: Ich finde die Datenmenge deines Clusters schon recht heftig, sind immerhin 480 MB, die du da 1x im Speicher belegst. Und wenn du das noch in ein Array packst, kann es gut sein, dass LabVIEW das als zusammenhängenden Speicherbereich anfordern will, i.e. 2880 MB. Nicht ohne. Und du musst bei solch großen Strukturen höllisch aufpassen, dass durch das Datenfluss-Prinzip von LabVIEW schnell mal Kopien angelegt werden. 1x Frontpanel-Element, Kopie. Einmal ein FlattenToString, um es binär abzuspeichern, Kopie. Einmal nicht sauber in die Datenstruktur reingehen, um ein Element zu ändern, Kopie.
Brauchst du wirklich so viele Zwischenspeicher im RAM?
Gruß, Jens
Hall tschaka81,
ich kann Dein vi hier leider nicht öffnen LV2010.
Als Ergänzung zu Jens Beitrag. Beschäftige Dich mal mit der Inplace Struktur und den DVR (DataValueReference), die genau diese Kopien verhindert.
Die Grenze bei LabVIEW 32-bit liegt wohl bei 2300-2350MB (64-bit Win7 8/16 Gb RAM)
Gruß
Ralf
|
|
|
15.06.2014, 11:46
Beitrag #4
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Speicherprobleme LV 2013
Hallo tschaka,
Zitat:Alternativ folgende Frage: Ich habe vor die oben genannten Arrays als Histogramme zu verwenden.
Ich kann dein VI mit LV2013-32bit auf WinXP-32bit schon mal gar nicht öffnen, selbst dabei kommt ein Fehler…
Zur Alternativ-Frage: Erläutere doch mal genauer, was du mit diesen Arrays vor hast!
Was willst du dort wie als Histogramm verwenden?
Wozu 2D-Arrays?
Wozu das Ganze 36mal (6 Cluster mit je 6 Arrays)?
|
|
|
16.06.2014, 11:58
Beitrag #5
|
tschaka81
LVF-Grünschnabel
Beiträge: 14
Registriert seit: Dec 2012
2011
2008
DE
|
RE: Speicherprobleme LV 2013
Hi
Sorry für die späte Antwort.
Was will ich eigentlich machen: Eigentlich wollte ich versuchen das Problem zu umgehen, da die Experimentstruktur ziemlich kompliziert ist. Mal schauen wie gut ich das zusammenfassen kann:
1. Ich bekomme (nach Bearbeitung meiner Daten) eine Liste mit Daten die etwa folgender Struktur ähnelt:
ADC1, TDC1, ADC2, TDC2, Kanal
das heißt einen Array mit 5 Einträgen pro Zeile. Jeder Wert ist ein 12-bit Wert, außer Kanal, der von 0 bis 5 geht.
Jetzt möchte ich ein Histogramm sowohl aus den einzelnen Spalten erstellen (ok ganz einfach), als auch ein 2D-Histogramm über 2 Spalten hinweg. Da meine Datenmenge mit der Zeit immer größer wird, will ich das 1. Array nicht immer mitschleppen und erneut auswerten, da die Rechenzeit für dieses Problem immer größer wird.
Daher hatte ich mich dazu entschlossen das 2D-Histogramm direkt in einem Hauptarray abzuspeichern. Das sind dann die einzelnen 2D-Arrays im Cluster. Genauso handhabe ich das mit den 1D-Arrays.
Weil ich in Labview nicht genug Speicher zuweisen kann, habe ich mich derzeit dazu entschlossen von 12-bit auf 10-bit zu wechseln. Damit kann Labview noch wunderbar arbeiten. In diesem Programm arbeite ich auch bereits mit Inplace Strukturen.
So die Ausgangslage.
Wie ich in meinem Anfangsthread aber schon vorgerechnet habe, sollte die Initialisierung des Clusters einen Speicher von 2,4 GByte schlucken. Also definitiv kleiner als die 16 Gbyte RAM die in der 64bit Version möglich ist. Aber selbst in dieser Version klappt schon das nackte erstellen des Clusters nicht. Ich suche im Moment eher nach einer Erklärung für das Verhalten. Vielleicht ist ja intern ein Speicherlimit für Arrays oder Cluster festgelegt!?
|
|
|
16.06.2014, 12:25
(Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2014 12:28 von Lucki.)
Beitrag #6
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Speicherprobleme LV 2013
Man sollte auch darn denken: jeder Verzweigunspunkt oder Überganspunkt (in eine Struktur) im Blockdiagramm entspricht einer neuen Datenkopie. Da kommt als Spiecherplatzbedarf ganz leicht ein Vielfaches der eigentlichen Datenmenge heraus.
Man kann ja statt aller Daten auf einmal auch einzelne Zeilen einer Datei lesen, und auf dieser Grundlage mit riesengroßen Datenmengen umgehen, ohne das Memory entsprechend zu belasten. Es besteht aber ein weit verbreitetes Vorurteil, dass wegen der viele Festplattenzgriffe dann das Programm unakzeptabel langsam wird. Irrtum: Sowohl alle modernen Festplatte als auch das Betriebssystem haben große Zwischenbufferr, aus denn der Zugriff nicht oder nicht viele langsamer ist als das Lesen direkt aus dem Memory.
Vorschlag: Poste Dein Programm, und ich (oder jemand anders) stellen es um, entsprechend diesem Vorschlag.
|
|
|
17.06.2014, 08:27
Beitrag #7
|
|
|
17.06.2014, 20:22
Beitrag #8
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Speicherprobleme LV 2013
Hallo tschaka,
Zitat:Ich hoffe ihr blickt in meinem Durcheinander durch.
Nein, das BD ist für mein Laptop (1280×800 px) viel zu groß und durch viel zu viele Sequenzen verschachtelt…
Die subVIs hättest du auch aufräumen können!
Und die offensichtlichen RubeGoldbergs zu entfernen sollte auch nicht so schwer sein, z.B. im "Reset Data":
Zitat:Wie ich in meinem Anfangsthread aber schon vorgerechnet habe, sollte die Initialisierung des Clusters einen Speicher von 2,4 GByte schlucken. Also definitiv kleiner als die 16 Gbyte RAM die in der 64bit Version möglich ist. Aber selbst in dieser Version klappt schon das nackte erstellen des Clusters nicht. Ich suche im Moment eher nach einer Erklärung für das Verhalten. Vielleicht ist ja intern ein Speicherlimit für Arrays oder Cluster festgelegt!?
Mit LV32bit wirst du hier immer an Probleme stoßen.
Bei 64bit sollte es theoretisch funktionieren, da hier mehr Speicher adressiert werden kann. Aber: das OS muss diese Speicherblöcke erstens generell für LabVIEW bereithalten und zweitens muss dieser Speicher dazu noch unfragmentiert vorhanden sein. Ist beides bei dir gegeben?
Ein internes Speicherlimit gibt es nicht, man kann theoretisch Arrays mit 2^31-1 Elementen anlegen (Indizes sind I32-Werte)…
|
|
|
18.06.2014, 19:36
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Speicherprobleme LV 2013
Hallo tschaka,
Zitat:Wenn ein 32-bit großes Array erstellt werden kann sind das 2^31-1 Elemente. Selbst wenn ich da drinnen nur einen 1 Byte Wert stehen habe ist der Gesamtspeicher für dieses Array 16 Gbyte.
Ein Array mit 2^31(-1) Elementen des Typs U8 (=Byte) ist eben 2^31 Byte groß. Oder auch 2*2^30= 2 GiB…
Zitat:Zumindest glaube ich derzeit das die Speicherverwaltung von Labview seine eigenen Limits dem System vorzieht. In meinem Rechner sind im übrigen 20 Gbyte RAM verbaut.
- Die Speicherverwaltung von LabVIEW wird versuchen, den nötigen Speicher vom OS zu bekommen.
- Auch wenn dein Rechner 20GB RAM verbaut hat, heißt das nicht, dass deinem VI eben diese 20GB (oder gar mehr dank VirtRAM) zur Verfügung stehen. Insbesondere nicht als zusammenhängender Block, wie du ihn für diese großen Arrays benötigst!
- Ich kenne mich mit der Speicherverwaltung von Windows nicht wirklich aus und weiß nur ein paar Eckdaten, insbesondere für die 32bit-Versionen. Ob und wie Win64bit andere Limits setzt, musst du dir von einem Experten erläutern lassen…
|
|
|
| |