INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Welche Optimierungen?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

01.09.2010, 08:41 (Dieser Beitrag wurde zuletzt bearbeitet: 01.09.2010 09:36 von Matze.)
Beitrag #1

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Welche Optimierungen?
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.

   

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.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2010, 10:43
Beitrag #2

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Welche Optimierungen?
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?

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.09.2010, 06:51 (Dieser Beitrag wurde zuletzt bearbeitet: 02.09.2010 06:53 von Matze.)
Beitrag #3

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Welche Optimierungen?
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.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.09.2010, 10:22
Beitrag #4

chrissyPu Offline
LVF-Stammgast
***


Beiträge: 467
Registriert seit: Jun 2006

2014 PDS
2006
DE_EN

64283
Deutschland
Welche Optimierungen?
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
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.09.2010, 10:57
Beitrag #5

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Welche Optimierungen?
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.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: