LabVIEWForum.de
Speicher-/Performance-Optimierung durch Schieberegister? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Speicher-/Performance-Optimierung durch Schieberegister? (/Thread-Speicher-Performance-Optimierung-durch-Schieberegister)

Seiten: 1 2


Speicher-/Performance-Optimierung durch Schieberegister? - Matze - 14.09.2010 07:40

Hallo,

soweit ich weiß, werden von (konstanten) Eingängen an Schleifen bei jeder Iteration Kopien angelegt.
Ist es daher gängig bzw. sinnvoll, diese durch Schieberegister zu ersetzen?

Ich würde sagen: Ja
Bin mir aber nicht ganz sicher, da ich das bisher so nicht gesehen habe. Oder mir ist es nie aufgefallen.

Das Pufferzuweisungs-Tool hilft hier leider nicht weiter.

Ich habe 2 Beispiele angehängt, die das verdeutlichen (oben jeweils ohne Schieberegister, darunter mit).
Über den Sinn und Unsinn des Codes müssen wir nicht diskutieren. Das ist ledichlich zur Verdeutlichung gedacht.Wink

[attachment=29380]

[attachment=29381]

Grüße


Speicher-/Performance-Optimierung durch Schieberegister? - GerdW - 14.09.2010 07:51

Hallo Mecha,

"soweit ich weiß, werden von (konstanten) Eingängen an Schleifen bei jeder Iteration Kopien angelegt."
Dies ist m.M.n. falsch. Wie man durch ConstantFolding gut sieht, wird bei konstanten Eingängen einmalig eine Kopie angelegt, die dann in jeder Iteration benutzt wird. (Es muss nicht mal eine Kopie sein...) Ein SR erzeugt halt nur unnötigen Overhead in einem solchen Fall... Konstanten einfach außerhalb der Schleife anlegen, fertig!


Speicher-/Performance-Optimierung durch Schieberegister? - Matze - 14.09.2010 08:18

Hallo Gerd,

danke. Du hast Recht.
Schieberegister haben einen großen Overhead, wie folgendes VI zeigt:

[attachment=29382]

Ohne Schieberegister dauert die Messung ca. 12.700 ms, mit Schieberegistern ca. 12.815 ms, aalso rund 100 ms länger.

Grüße


Speicher-/Performance-Optimierung durch Schieberegister? - GerdW - 14.09.2010 08:20

Hallo Mecha,

noch ein Nachtrag: Warum benutzt du bei der Array-Initialisierung SRs und ReplaceArrayElement? Bei einer FOR-Loop mit bekanntem N ist LabVIEW so smart, solche Array effizient selbst anzulegen, sobald du AutoIndeing benutzt...


Speicher-/Performance-Optimierung durch Schieberegister? - Matze - 14.09.2010 08:31

Gute Frage, wieso ich das hier gemacht habe. Sonst nutze ich Auto-Indexing, wie man in der rechten Schleife sieht. *g*


Speicher-/Performance-Optimierung durch Schieberegister? - macmarvin - 14.09.2010 15:00

' schrieb:Ohne Schieberegister dauert die Messung ca. 12.700 ms, mit Schieberegistern ca. 12.815 ms, aalso rund 100 ms länger.

Wie häufig hast du die Messung laufen lassen? Während 12 Sekunden kann ein normales Windowssystem viel nebenbei gemacht haben.


Speicher-/Performance-Optimierung durch Schieberegister? - Matze - 14.09.2010 16:38

' schrieb:Wie häufig hast du die Messung laufen lassen? Während 12 Sekunden kann ein normales Windowssystem viel nebenbei gemacht haben.
Jeweils ca. 10 Mal, auch abwechselnd. Die Werte waren alle reproduzierbar (+/- wenige Millisekunden).


Speicher-/Performance-Optimierung durch Schieberegister? - macmarvin - 15.09.2010 09:24

Ich weiss nicht was du gemessen hast bzw. wo LV Teile rausoptimiert hat, aber das Ausgangsterminal wurde in deinem Code sicher nicht komplett angelegt (es sei denn Du benutzt LV 64bit und hast richtig viel RAM im Rechner).

Mal so überschlagsweise:
X*Y*sizeof(DBL)
50000*50000*8B = 19073 MB = 18,6 GB

Anbei ein leicht abgeänderter Benchmarkversuch
[attachment=29406] LV2010


Speicher-/Performance-Optimierung durch Schieberegister? - Matze - 15.09.2010 09:32

Hm, also das gestern lief irgendwie. Unsure

Deins zeigt im Endeffekt überall die gleichen Werte an. Setze ich die Größe deutlich rauf, ist der Speicher voll.


Speicher-/Performance-Optimierung durch Schieberegister? - SeBa - 15.09.2010 09:41

' schrieb:Mal so überschlagsweise:
X*Y*sizeof(DBL)
50000*50000*8B = 19073 MB = 18,6 GB

Wieso 50000*50000 ?

Ich seh in dem Screenshot ein boolsches 1D-Array und ein dbl 1D-Array ... aber kein dbl 2D-Array mit 50k*50k...

Gruß SeBa