LabVIEWForum.de - Parallele Ausfuehrung

LabVIEWForum.de

Normale Version: Parallele Ausfuehrung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich bin gerade dabei einen zeitkritischen Programmteil etwas zu optimieren. Ich habe dabei versucht, alles so anzulegen, dass LabVIEW Aufgaben die unabhaengig voneinander sind parallel ausfuehren kann (hoffe das dies einen Zeitvorteil mit sich bringt). Nun bin ich mir aber gar nicht sicher, ob und wann LabVIEW bestimmte Codeabschnitte in unabhaengige Threads packt.

Von NI bin ich mal auf das BeispielVI gestossen, in dem mehrere Schleifen unabahaengig voneinander laufen. Dort wurde gesagt, dass jede dieser Schleifen wohl ihren eigen Thread bekommt und diese dann tatsaechlich parallel ablaufen. Aber wie sieht es beispielsweise aus, wenn ich einfach verschiedene VIs nebeneinander packe? werden die parallel ausgefuehrt?

Ich habe einen Screenshot angehaengt, der so einen aktuellen Fall aus meinem Programm zeigt (bitte auf das error wiring achten - es sollten 3 VIs "parallel" ausgefuehrt werden). Ist dies in meinem Beispiel der Fall?

Viele Gruesse,
Steffen
Hallo Steffen,

grundsätzlich laufen Programmteile parallel, wenn es keine Datenabhängigkeit zwischen ihnen gibt.

Es gibt natürlich noch ein paar Sonderregeln:
- wird das gleiche VI mehrfach aufgerufen, so muss es reentrant sein für "echte" Parallelabarbeitung
- es sollte natürlich nicht auf die gleiche Hardware/Resource zugegriffen werden - da wird die Parallelität zumeist vom Treiber unterbunden bzw. "gehandhabt"
- wenn nur ein CPU-Core zur Verfügung steht, bringt dir die Parallelität meist wenig...
' schrieb:Dort wurde gesagt, dass jede dieser Schleifen wohl ihren eigen Thread bekommt und diese dann tatsaechlich parallel ablaufen.
Mit Thread ist hier nicht unbedingt ein Thread auf CPU-Ebene gemeint. "Parallel" kann auch nur heißen, dass, obwohl jeder Prozess für sich z.B. 5 Sekunden dauert, sie zur selben Millisekunde starten und ende können. "Parallel" bezieht sich also eher auf die Ausführung auf Anwenderebene, nicht unbedingt auf die CPU-Core-Ebene. Ein Timesharing, das für parallele Ausführbarkeit ausreicht, kann sowohl die LV-Runtime als auch das Betriebssystem machen.

While-Schleifen, SubVI's, im allgemeinen also Prozesse, werden, guckst du die Einschränkungen von GerdW, in diesem Sinne parallel ausgeführt. Einen Zeitvorteil bringt die Parallelität natürlich nur dann, wenn ausreichende Hardwareressourcen vorhanden sind.

Zitat:(bitte auf das error wiring achten - es sollten 3 VIs "parallel" ausgefuehrt werden).
Welche drei VIs sollen parallel ausgeführt werden?

Nachtrag:
Sind die drei VIs: camera, filterwh und m_syst? Da sag ich jetzt: Die werden parallel ausgeführt. Beachte aber die Einschränkungen wegen gemeinsamer Ressoursen!
Vielen Dank ihr beiden!

Eine Frage habe ich noch!

Wenn ich den Code in EINEM VI vorliegen habe, kann ich gewissen Abschnitte einer hoeherer Prioritaet unterstellen? (dem Flaschenhalsprozess meines Programms moechte ich gerne hoechste Prioritaet verleihen). Oder muss ich diese Abschnitte dafuer in ein extra SubVI packen?

Gruesse,
Steffen
' schrieb:Wenn ich den Code in EINEM VI vorliegen habe, kann ich gewissen Abschnitte einer hoeherer Prioritaet unterstellen?
Zeitgesteuerte While-Schleifen können Priorität haben. Guckst du in der Hilfe "Priorität".

Zitat:Oder muss ich diese Abschnitte dafuer in ein extra SubVI packen?
Bei SubVIs kannst du die Priorität so hoch einstellen - dass der Rest nicht mehr funktioniert.
Referenz-URLs