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 

Geschwindigkeitsoptimierung paralleler Schleifen



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!

09.09.2008, 06:38
Beitrag #1

frawa Offline
Gelegenheitschreiber


Beiträge: 5
Registriert seit: Dec 2006

7.1 - 2011
2006
DE_EN

974xx
Deutschland
Geschwindigkeitsoptimierung paralleler Schleifen
Liebe LV-Forums-Gemeinde,

im Anhang hängt ein VI (LV 8.5), welches zum Debuggen eines µC-basierten Messsystems per SPI genutzt werden soll.

Es existieren 3 While-Schleifen,

1x als State Machine zum Init und fürs UI
1x als Messdatenerfassung über einen über USB angebundenen SPI-Slave (Aadvark)
1x als Auswertung der SPI-Daten

Die letzten beiden Schleifen sind über eine Queue verbunden.

Nach meiner Vorstellung sollten die Schleifen (quasi-) parallel laufen (Ausführungrechner = Pentium M = single core).

Die schnellste realisierbare Poll-Rate des SPI-Slaves beträgt ca. 14 ms (ermittelt im Testprogramm, in dem lediglich der Slave angesprochen wird).

Ziel ist die halbwegs zeitstabile Abfrage des SPI-Slaves alle 20 ms. Dies funktioniert soweit gut, bis ich in die Tabelle schreibe. Dann stockt mein Abfrageprozess kurzzeitig und dauert >100ms.

Wieso ist das schreiben der Tabellen-Variable so langsam?
Wieso beeinflusst es die Datenerfassungs-Schleife?
Wie könnte ichs besser machen?

Schon jetzt danke für euere Bemühungen!

Lv85_img


Angehängte Datei(en)
Sonstige .vi  MAIN_Debug.vi (Größe: 113,29 KB / Downloads: 188)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.09.2008, 08:20 (Dieser Beitrag wurde zuletzt bearbeitet: 09.09.2008 08:23 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Geschwindigkeitsoptimierung paralleler Schleifen
Habe mir das VI mal angesehen, ist natürlich bei mir nicht lauffähig (Dies SPI-VIs, woher sind die eigentlich? Ich habe sie nicht).
Lokale Veriablen sind ca 10mal langsamer als die Elemente selbst. Das ist aber noch gar nichts im Vergeleich zu den Eigenschaftsknoten, die sind gleich 200mal langsamer.
Deshalb solltest Du es gerade umgekehrt machen als wie es jetzt ist:
In der zeitkritischen Hauptschleife möglichst die Elemente selbst verwenden, und die lokalen Veriablen oben in der Konfiguration. Das gilt speziell für die lokalen Variablen "Result Table" und "Config Date" in der Auswertungsschleife.
Den Eigenschaftsknoten "Result Table"(Spaltentitel) in der Haupschleife wegzubekommen ist umständlicher: Du müßtest den Eigenschaftknoten dort gegen ein verborgenes Bedienelement ersetzen. Der Eigenschftknoten müßte dann in die Konfigurationsschleife und schreibt seinen Inhalt in eine lokale Variable dieses verborgenen Bedienelementes.
Wenn das alles nichts nützt, dann sollte man überlegen, ob diese große Tabelle wirklich wegen jeder einzelnen Zeile aktualisiert werden muß. Es würde doch auch genügen, die Tabelle nur alle 10 Zeilen zu aktualisieren, das wäre dann immer noch schneller als der Mensch gucken kann
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.09.2008, 10:34
Beitrag #3

MikeS81 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 231
Registriert seit: Aug 2008

8.5
2005
de_en

81xxx
Deutschland
Geschwindigkeitsoptimierung paralleler Schleifen
Hallo frawa,
ich empfehle den Einsatz von Schieberegistern. Damit kannst du schon einige Dinge verbessern. Die Referenz der Semaphore kannst du direkt als Draht nach oben verbinden, hier ist kein Einsatz von lokalen Variablen notwendig.

Mike
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.09.2008, 06:30
Beitrag #4

frawa Offline
Gelegenheitschreiber


Beiträge: 5
Registriert seit: Dec 2006

7.1 - 2011
2006
DE_EN

974xx
Deutschland
Geschwindigkeitsoptimierung paralleler Schleifen
Zunächst vielen Dank für euere Bemühungen, Lucki & Mike.

Ich habe eure Vorschläge umgesetzt, dennoch hapert es an der gewünschten Geschwindigkeit.

Folgende Fragen dazu:

Die beiden per Queue verbundenen schleifen werden zurzeit anscheinend sequentiell ausgeführt, solange ich die consumer schleife nicht bremse (per value highlight zum debug) ist die queue stehts leer. Wie kriege ich die Schleifen wirklich unabhängig?

Im Auswerteteil erzeuge ich momentan ein Array, welches ich dann für jeden neuen Datenpunkt vergrößere. Gehe ich richtig in der Annahme, dass ein von Anfang an großes Array, in dem ich dann nur noch Werte ändere, aus Speicherallokationsgründen schneller ist?

Gruß Frank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Event structure/ paralleler Prozess Brainbug 5 5.115 28.05.2014 11:38
Letzter Beitrag: GerdW
  Paralleler Ablauf oder nicht? IchSelbst 12 9.111 07.10.2008 09:23
Letzter Beitrag: Lucki

Gehe zu: