INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Parallelisiert aus Datei lesen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

10.08.2011, 14:28
Beitrag #1

GlühBirne Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Aug 2011

2010
2010
kA



Parallelisiert aus Datei lesen
Hallo Leute,

ich möchte ein ASCII-File auslesen. In jeder Zeile steht eine Information die ich brauche, deshalb werte ich jede Zeile aus, hole die Informationen aus der Zeile, die ich brauche und speichere diese in ein Array. Anfangs habe ich versucht das File komplett einzulesen. Dabei bekam ich Probleme mit dem Arbeitsspeicher, da die Files sehr groß sind. Darum lese ich die Files jetzt zeilenweise von vorne nach hinten aus. Das dauert aber viel zu lange. Deshalb möchte ich das Lesen aus der Datei parallelisieren. Das File soll nicht von vorne nach hinten ausgelesen werden, sondern es soll an mehreren Stellen im File gleichzeitig gelesen werden.

Ich lese deshalb beispielsweise parallel das erste, zweite und dritte drittel des Files, speichere die gewonnen Informationen in drei Arrays und führe diese drei Arrays zum Schluss zu einem Array zusammen. Davon erhoffe ich mir, dass das File dreimal so schnell ausgelesen werden kann.

Leider muss ich dafür das File dreimal öffnen und schließen. Im angehängtem Bild wird die Idee exemplarisch dargestellt. Die drei Sub-VIs lesen das jeweils File von der gegebenen Start-Adresse bis zur jeweiligen End-Adresse Zeile für Zeile aus, ziehen die gewünschten Informationen und speichern diese jeweils in 3 Arrays (Array 1, Array 2 und Array 3).

Dies funktioniert leider sehr unzuverlässig. Das File wird zum Schluss sehr langsam ausgelesen.

Gibt es eine bessere Methode ein File parallelisiert auszulesen, oder an verschiedenen Stellen im File gleichzeitig zuzugreifen? Gibt es vlt. VIs die für diese Zwecke geeignet sind?

Ich würde mich freuen, wenn Ihr mir helfen könnt.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.08.2011, 15:07 (Dieser Beitrag wurde zuletzt bearbeitet: 10.08.2011 15:07 von SeBa.)
Beitrag #2

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
RE: Parallelisiert aus Datei lesen
Nur mal rein theoretisch...

du willst ein Buch lesen. Einfach normal von vorne nach hinten lesen dauert dir zu lange. Also liest du es jetzt 'wannabe' parallelisiert aus. Dafür machst du folgendes:
Du öffnest das Buch an drei Stellen und liest gleichzeitig einen Satz von Stelle Eins, einen Satz von Stelle Zwei ... den zweiten Satz von Stelle Eins ect.pp. ich glaub soweit klar.

Falls du jetzt nicht gerade ein dreiköpfiger Hund bist, der in seiner Freizeit gerne schnell Bücher liest, sollte dir auffallen, dass das so nicht gehen kann. Du hast ja nur einen Kopf. Vedammt!

Buch = Datei
Du = Schreib-/LeseKopf der Festplatte
Hund = Raid-System

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!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.08.2011, 16:17
Beitrag #3

GlühBirne Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Aug 2011

2010
2010
kA



RE: Parallelisiert aus Datei lesen
Hm, ja dass das nicht wirklich gleichzeitig abläuft ist mir klar. Wie das überhaupt geht, dass ich mehrmals eine Datei öffnen kann, weiß ich nicht. Ich weiß nicht was LabVIEW intern handhabt. Ich vermute ein C-Programm würde einen Laufzeit-Fehler liefern, wenn ich versuchte eine Datei mehrfach zu öffnen. Ich habe das VI schon getestet und es geben alle drei Sub-VIs Werte aus. Trotzdem löst das mein Problem nicht, da dies ja nicht zuverlässig funktioniert und mir ist ebenfalls klar, dass dies nicht sauber programmiert ist.

Meine Überlegung bei der Sache war, dass ich vermutet habe, dass das Lesen aus der Datei garnicht das ist, was am längsten dauert. Nur kommt ja noch die Verarbeitung jeder Zeile hinzu. Und das sollte nach Möglichkeit 3 mal gleichzeitig (also durch das Betriebssystem arbitriert) geschehen.

Mir kommen folgende Ideen:

Tripple Buffering -> Buffer 1 wird mit Werten von der Festplatte befüllt - Buffer 2 wird verarbeitet - Buffer 3 legt die Daten in einem Array ab

Nur ist mir noch nicht klar wie ich so etwas mit LabVIEW realisieren könnte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.08.2011, 16:44
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Parallelisiert aus Datei lesen
(10.08.2011 15:07 )SeBa schrieb:  Buch = Datei
Du = Schreib-/LeseKopf der Festplatte
Hund = Raid-System
Nachtrag hierzu: Solange dein Lese-VI nicht als reentrant definiert ist, wird es nur 1x und nicht mehrfach parallel ausgeführt.

Und um in Vergleich zu bleiben:
Ein paar Augen im Kopf = Lese-VI

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.08.2011, 10:11 (Dieser Beitrag wurde zuletzt bearbeitet: 11.08.2011 10:27 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Parallelisiert aus Datei lesen
Ich bin ursprünglich auch mal davon ausgegangen, daß das zeilenweise Lesen bei großen Dateien sehr viel länger dauert als das Einlesen in einem Block. Habe aber dann die Erfahrung gemacht, daß das fast gar nicht zutrifft. Man darf sich das zeilenweise Einlesen eben nicht so vorstellen, das da wegen jeder einzelnen Zeile ein Zugriff auf die Festplatte erfolgt. Das Lesen erfolgt vielmehr in größeren Blöcken, und die einzelne Zeile wird dann aus irgendeinem Zwischenpuffer gelesen (Gewöhnlich wird diese Aufgabe vom Puffer auf der HD besorgt, und vielleicht ist es bei Dir langsam, weil du eine Uralt-Festplatte ohne oder mit zu kleinem Puffer verwendest --> bitte mal den Typ benennen).
Deshalb schlage ich vor: Poste doch erst mal dein ursprüngliches VI. Da könnte man mal nachschauen, warum es langsam ist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Datei lesen > anzeigen > verändern > speichern djbugs 5 7.787 26.01.2017 10:18
Letzter Beitrag: GerdW
  .tdms: mehrere Signale aus einer Datei lesen Kristin_611 4 7.171 03.02.2015 12:09
Letzter Beitrag: Kristin_611
Question NUR Eigenschaften einer TDMS Datei lesen Lucky 1 4.671 24.11.2014 10:12
Letzter Beitrag: macmarvin
  Text aus Datei lesen, jedoch bestimmte Zeilen floeteee 5 8.051 13.02.2014 11:03
Letzter Beitrag: GerdW
  Datei lesen --> schreiben --> Unterschied DrHoas 2 4.847 14.06.2013 12:28
Letzter Beitrag: DrHoas
  CSV Datei, lesen + schreiben, strings, double Fireraiser 3 11.916 02.05.2013 14:49
Letzter Beitrag: Fireraiser

Gehe zu: