LabVIEWForum.de
Welche Optimierungen? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW RealTime (/Forum-LabVIEW-RealTime)
+---- Thema: Welche Optimierungen? (/Thread-Welche-Optimierungen)



Welche Optimierungen? - Matze - 01.09.2010 08:41

Hallo,

ich habe ein SubVI geschrieben, das (leider) recht groß ist. Es ist das unübersichtlichste VI in diesem Projekt. Unsure
Und es läuft viel zu langsam.
Da mir eine 6-stellige Genauigkeit zu gering ist, bin ich wohl auf den Double-Wert angewiesen (oder eben alles mit FXP berechnen, wobei das sehr unübersichtlich wird).

Die 2 SubVIs enthalten lediglich 2 Vergleiche und sind inline eingefügt.
Das VI wird pro Durchlauf der Hauptschleife ca. 50 mal in einer For-Schleife aufgerufen. Dort lese ich 50 Messwerte ein, die mit dem angehängten VI dann geprüft werden. Liegen Messwerte innerhalb zweier Grenzen, gebe ich u.a. die Messwerte zurück (über 2 Arrays).

Welche Optimierungsmöglichkeiten seht ihr?
Die automatische Fehlerbehandlung ist bereits dektiviert.

Das Timing-Werkzeug zeigt mir leider nicht an, was langsam ist, nur dass es an diesem VI liegt.

[attachment=29132]

Ich könnte auch versuchen, nicht mit den kalibrierten FXP-Daten zu arbeiten, sondern mit den RAW-Daten.
Allerdings weiß ich nicht, wie diese Werte dann nachher kalibriert werden können.
Die Skalierung würde ich vermutlich noch irgendwie hinbekommen, wobei ich mir da auch nicht ganz so sicher bin. Je nachdem, was für den AD-Wandler das Minimum und Maximum ist.

Nachtrag: Auch mit den RAW-Werten (I32) ist das von der Geschwindigkeit fast identisch.


Welche Optimierungen? - Matze - 01.09.2010 10:43

Ich bin nun etwas schlauer: Die meiste Zeit wird in den unteren beiden Array-Schieberegistern verbraten. Je größer die beiden Arrays, desto länger die Laufzeit des VIs.
Ich habe es bereits so optimiert, dass ich die Arrays vorbelege und nur Werte ersetze (s. oben), aber das reicht wohl nicht aus.

Zur Zeit habe ich eine Array-Größe von je 7.000 Werten (7 s max. Messzeit mit 1 kHz).

Wie kann man sowas denn weiter optimieren oder geht das nicht?


Welche Optimierungen? - Matze - 02.09.2010 06:51

Wenig FPGA- und Real-Time-Leute hier im Forum ...

Ich habe die beiden Arrays nun durch je ein RT-FIFO ersetzt. Soweit ich weiß, sind diese zwar nicht unbedingt dafür gedacht, aber wenn ich das richtig sehe komme ich nun auf eine Durchlaufzeit der Hauptschleife von ca. 7 ms im Vergleich zu 130 ms vorher.
Das wäre eine enorme Steigerung.

Aber ob das sein kann und wieso das so viel schneller ist als Arrays, verstehe ich nicht.


Welche Optimierungen? - chrissyPu - 03.09.2010 10:22

Hi,
auf was für einem Target läuft das VI? Realtime, Host oder FPGA? Weiß nicht, ob das auf RT oder FPGA geht, aber schau doch mal nach der "Inplace"-Struktur für die Arrays, vielleicht macht das das Schreiben ein wenig schneller, weil weniger Memory-Bereiche beschrieben werde...

ch


Welche Optimierungen? - Matze - 03.09.2010 10:57

Hallo,

danke für die Antwort.

' schrieb:auf was für einem Target läuft das VI? Realtime, Host oder FPGA?
Das läuft auf dem Real-Time-Controller. Die Inplace-Element-Struktur bringt meines Wissens nur einen Vorteil, wenn ich einen Wert aus dem Array verändern möchte (z.B. neuer Wert = 2 x alter Wert). Sobald ich etwas komplett neues zuweise, habe ich dadurch keinen Vorteil.

Die RT-FIFOs leisten bisher wirklich gute Dienste. Ich hoffe, die sind dfür geeignet.