16.06.2010, 10:09
(Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2010 10:10 von chrissyPu.)
Beitrag #2
|
|
|
16.06.2010, 10:19
(Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2010 10:44 von dimitri84.)
Beitrag #3
|
dimitri84
Astronaut
Beiträge: 1.496
Registriert seit: Aug 2009
2020 Developer Suite
2009
DE_EN
53562
Deutschland
|
Pausieren von parallel ablaufenden Producer/Consumer Schleifen
' schrieb:so mal in den Raum gesagt: Schleife für Prozessor 1 mit einer 3-State-Machine ausstatten: 1. State Queue testen, wie voll sie ist, 2. Wait,
Nicht, dass sich die Daten auf diese Weise dann plötzlich im FIFO Puffer der Karte stauen, anstatt in der Queue. Da wäre dann der Queue Puffer die deutlich bessere Alternative, da um Welten größer ...
An Aleph1: Mach erstmal dein Programm so wie du es vorhast. Dann sehen wir ob sich was staut oder nicht. Prinzipiell hört sich dein Konzept sehr gut an.
Edit: Ich bin jetzt mal von Hardwaretakt ausgegangen, weil von großen Datenmengen die Rede ist ...
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
|
|
|
16.06.2010, 10:49
Beitrag #4
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Pausieren von parallel ablaufenden Producer/Consumer Schleifen
' schrieb:Wie schaffe ich es, abhängig von der ... Speicherbelegung der Queue ... , Prozess 1 (Datenaufnahme) pausieren zu lassen so dass Prozess 2 erstmal die Daten weiter verarbeiten kann?
Genau so: Kucken, wie viele Elemente in der Queue noch Platz haben (oder schon drinnen sind) ...
' schrieb:Edit: Ich bin jetzt mal von Hardwaretakt ausgegangen, weil von großen Datenmengen die Rede ist ...
Pausieren (siehe oben) im Sinne des Anwenders würde dann heißen, dass der Hardwarepuffer zwar ausgelesen wird - aber nicht per Queue verschickt.
Solange das Problem besteht, dass die Messwerterfassung über Zeit gesehen schneller geht als deren Verarbeitung (wie auch immer: ob zwischenverarbeitet und dann gespeichert oder gestreamt gespeichert), muss man immer mit Verlust in Prozess 1 rechnen - sprich pausieren.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
16.06.2010, 10:55
(Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2010 10:59 von dimitri84.)
Beitrag #5
|
dimitri84
Astronaut
Beiträge: 1.496
Registriert seit: Aug 2009
2020 Developer Suite
2009
DE_EN
53562
Deutschland
|
Pausieren von parallel ablaufenden Producer/Consumer Schleifen
' schrieb:Pausieren (siehe oben) im Sinne des Anwenders würde dann heißen, dass der Hardwarepuffer zwar ausgelesen wird - aber nicht per Queue verschickt.
Aha, und wo warten dann die ausgelesenen Daten in der Pause? Auf dem Pausenhof und essen ihr Pausenbrot? Sprich noch ein Puffer?
Ohne ein Programm finde ich es etwas früh darüber zu spekulieren ob die Verarbeitung zu lange dauert, zumal soviele Kerne im Spiel sind.
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
|
|
|
16.06.2010, 11:22
Beitrag #6
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Pausieren von parallel ablaufenden Producer/Consumer Schleifen
' schrieb:Aha, und wo warten dann die ausgelesenen Daten in der Pause? Auf dem Pausenhof und essen ihr Pausenbrot? Sprich noch ein Puffer?
Die warten nicht, die gehen verloren ...
Zitat:darüber zu spekulieren ob die Verarbeitung zu lange dauert
Meine Überlegungen beziehen sich nicht auf ein Ob, sondern auf ein Dass.
Da fällt mir gerade ein:
Auch wenn die Prozesskette zu langsam ist, muss sich Prozess 1 eigentlich um gar nichts kümmern: Einfach in die Queue reinschreiben. Wenn die Queue bereits voll ist, wird der letzte Puffer einfach ignoriert und geht automatisch verloren.
Pausieren kann natürlich auch heißen, die Messwertgenerierung zu stoppen. Das geht dann natürlich wieder wie bei chrissyPu.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
16.06.2010, 13:19
Beitrag #8
|
Aleph1
LVF-Gelegenheitsschreiber
Beiträge: 51
Registriert seit: Sep 2005
7.1 + 8.6.1
2005
de_en
69120
Deutschland
|
Pausieren von parallel ablaufenden Producer/Consumer Schleifen
Hallo miteinander,
danke euch schon mal für eure guten Vorschläge.
Was mit den Daten in der eventuellen Pause geschieht, soll mir grad mal egal sein.
Man könnte ja auch, je nach gewünschtem Anwendungszweck Optionen schalten
Messkarte auslesen und neue Daten wegwerfen bis Queue leer
oder
Neue Messdaten als letztes Element in die Queue schreiben und den letzten Wert verlieren.
Aber das soll mich jetzt mal nicht kümmern.
In so fern ist der Vorschlag mit der Statemaschine aber sehr gut zu gebrauchen, der macht ja genau das mit dem "warten bis..."
Bis ich euch ein Programm zeigen kann, dauerts wohl noch a bissl, aber nur so weit: Ich gehe momentan davon aus, dass die datenzwischenverarbeitung (wird eine Art Datenkompression) langsamer vonstatten geht, als die Datenaufnahme, die ich eigentlich beliebig schnell machen kann (hängt nur von der Bitrate der A/D-Wandlerkarte ab, und da gibts sehr schnelle). Die Zwischenverarbeitung der Daten brauch ich, da ich solche Datenmengen nie auf ner Festplatte speichern kann. Mehr zu erklären wär grad zu viel.
Und wenns geht, würde ich schon gern ein paar Megasample/s durch mein System jagen.
Gruß und Danke nochmal
Karl
|
|
|
16.06.2010, 13:28
Beitrag #9
|
|
|
| |