LabVIEWForum.de
Parallelisieren von Schleifen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Parallelisieren von Schleifen (/Thread-Parallelisieren-von-Schleifen)



Parallelisieren von Schleifen - gottfried - 15.03.2013 11:01

Hallo,

das Tool zum finden ist super nur habe ich ein Überlegungsprobem mit den Schleifen "möglicherweise parallelisierbar" und da geht es um mögliche Nebenwirkungen (side effects) der beinhaltenden VIs.

1. *side effects* ich denke, wenn das VI bei seiner Rechnung nichts beeinflusst, dass den Input dieses VI beeinflusst sollte das gehen? Also Output der VIs und globale Variabe. - stimmt das?

2. Aber damit das beinhaltende VI mehrfach laufen kann muss ich es doch reentrant kompilieren? - richtig?

3. aber auch die komplette VI Kette, wenn sie in Schleifen Werte speichert, reentrant?

Bitte um Hilfe

Danke

Gottfried


RE: paralellisieren von Schleifen - jg - 15.03.2013 16:35

(15.03.2013 11:01 )gottfried schrieb:  1. *side effects* ich denke, wenn das VI bei seiner Rechnung nichts beeinflusst, dass den Input dieses VI beeinflusst sollte das gehen? Also Output der VIs und globale Variabe. - stimmt das?
Sorry, verstehe deine Frage nicht.
(15.03.2013 11:01 )gottfried schrieb:  2. Aber damit das beinhaltende VI mehrfach laufen kann muss ich es doch reentrant kompilieren? - richtig?
Ja.
(15.03.2013 11:01 )gottfried schrieb:  3. aber auch die komplette VI Kette, wenn sie in Schleifen Werte speichert, reentrant?
Ja, wenn die SubVIs auch parallel laufen sollen.

Gruß, Jens


RE: Parallelisieren von Schleifen - gottfried - 16.03.2013 10:54

Hallo,

hier meine Erfahrungen:

* das in Frage kommende Programm mit Testdaten laufen lassen und das Resultat notieren
* mit dem Taskmanager schauen ob noch freie Kapazität da ist
* mit Profile die rechenzeitintensiven VIs ausfindig machen - die sind das Ziel der Parallelisierung
* die Schleife die diese VIs beinhaltet parallelisieren
* rechenzeitintensiven VIs reentrant machen (preallocate)
* alle sub VIs zwischen der Schleife und dem rechenintensiven VI müssen reentrant sein
* Programm noch einmal laufen lassen und sich freuen (oder wundern wieso etwas anderes herauskommt :-)
* Ist nun die Rechenzeit auf 100%? - OK

funktioniert toll.

Stolpersteine (für mich) waren:

* in VIs gespeicherte Werte - diese VIs sind grundsätzlich nicht parallelisierbar
* in Vision sind es die mit IMAQ_create eingegebenen (fixen) Namen. Da hilft sich die Referenz des VIs zu nehmen und nachzusehen ob das ein Clon ist und in diesem Fall den ClonNamen anzufügen.

Gottfried

PS.: vielleicht können noch Andere hier ihre Erfahrungen zu einem gemeinsamen Tutorium zusammenfügen.


RE: Parallelisieren von Schleifen - Lucki - 16.03.2013 11:07

Hört sich alles gut an. Aber bevor ich selbst nach diesem sagenhaftem Tool google: Ein Link oder sonstiger Finde-Hinweis wäre schon nicht schlecht. Oder bin ich hier der einzige Ahnunglose und blamiere mich jetzt mit dieser Amerkung bis auf die Knochen?


RE: Parallelisieren von Schleifen - gottfried - 16.03.2013 11:29

Dieses "Tool" ist Teil von LV:
Tools | Profile | find parallelizable Loops

So weit

Was mich aber irritiert (ich nicht erklären kann) ist warum die Anzeige "s/Function call" (unten) Schwachsinn ausgibt. Kannst Du das erklären?

Danke

Gottfried


RE: Parallelisieren von Schleifen - GerdW - 16.03.2013 12:13

Hallo Gottfried,

definiere "Schwachsinn"... Big Grin


RE: Parallelisieren von Schleifen - gottfried - 16.03.2013 15:50

"Schwachsinn" lt. EDV-Duden von 1732 als definiert offensichtlich unzutreffendes Resultat einer Sequenz von Maschinenbefehlen die auf den ersten Blick richtig aussehen.


RE: Parallelisieren von Schleifen - GerdW - 16.03.2013 16:03

Hallo Gottfried,

du kennst das Spielchen doch schon: Welche Daten werden erwartet und welche werden stattdessen angezeigt?

Nur aufgrund der Aussage "Indicator zeigt Schwachsinn an", unterlegt mit einem Bildchen, kann hier wohl kaum jemand was substanzielles beitragen...


RE: Parallelisieren von Schleifen - gottfried - 16.03.2013 17:38

Hallo GerW,

Du hast _absolut_ recht. Der Effekt war (für mich) tatsächlich verblüffend: die angezeigte Rechenzeit ist gestiegen, gestoppt ist sie aber gefallen - daher meine Reaktion "Schwachsinn".

Nach einigem Abstand musste ich aber den Begriff "Schwachsinn" in eine selbstktitischere Nomenklatur "adaptieren": der gewählte Code zeigt die Rechenzeit in einem Thread, und das wird mehr wenn der Prozessor überbeschäftigt ist. Wenn ich die Zeitnehmung außerhalb der Schleife mache bekomme ich tatsächlich etwa 1/3 der Rechenzeit ohne Parallelisierung.

Gottfried hat sich geirrt nicht der Compiler ... wieder einmal .... Cool

Danke

Gottfried


RE: Parallelisieren von Schleifen - gottfried - 28.03.2013 10:03

Hier noch einige Zusätze zu der weoter oben formulierten Punkteliste:

TEST:

* einen Durchlauf (aber mit heftiger CPU Last) ohne Parallelisierung investieren und einen mit
* wenn etwas anderes herauskommt die einzelnen Parallelisierungen einzeln ausschalten
* ... identische "Fälle" mehrfach "parallel" rechnen
* Paralellisierte Schleifen kann man im Prallelisierungs-Finde-Tool wieder finden Big Grin
* zuerst die CPU Zeit messen und _dann_ erst Paralellisieren, "kleine" Schleifen machen diesbezüglich keinen Sinn

Gottfried