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 

While Loop Performance



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!

27.03.2013, 11:49 (Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2013 11:50 von Diplomand.)
Beitrag #1

Diplomand Offline
CLAD
**


Beiträge: 184
Registriert seit: Jul 2007

8.50, 10.0, 11.0
2006
kA

58455
Deutschland
While Loop Performance
Hallo,
ich möchte mittels Weil-Schleife eine Buffer-Abfrage machen.
Es wird von der Hardware jede 800 µs einen Wert in Buffer geschrieben.
Ich habe mit dem LabVIEW über einen DLL den Zugriff auf dem Hardware-Buffer.
Diese DLL wird bei mir in eine Weilschleife immer wirder aufgerufen, leider schaft meine Weilschleife max 510 Abfragen in eine Sekunde.
Das ist leider zu langsam, da der LabVIEW lansamer aus der Buffer liest als der Buffer von Hardware beschrieben wird, so dass ich die aktuelle Werte aus dem Buffer mit Verspätung lese. Was ich brauche ist eine Möglichkeit die Abfrage der Buffer auf um 1500 oder mehr pro Sekunde zu realisieren.
Hat jemand eine Idee? Vielen Dank im Vorauß!
Diplomand


Angehängte Datei(en)
11.0 .vi  WhileLoopPerformance.vi (Größe: 7,81 KB / Downloads: 232)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.03.2013, 11:56 (Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2013 11:57 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: While Loop Performance
Hallo Diplomand,

dein VI schafft bei mir ~15Mio Durchläufe in einer Sekunde. Dummerweise hat es mit deiner Frage überhaupt nichts zu tun...

Zitat:Es wird von der Hardware jede 800 µs einen Wert in Buffer geschrieben. Ich habe mit dem LabVIEW über einen DLL den Zugriff auf dem Hardware-Buffer.
Wie groß ist der Buffer?

Zitat:Was ich brauche ist eine Möglichkeit die Abfrage der Buffer auf um 1500 oder mehr pro Sekunde zu realisieren.
Falsch. Was du brauchst, ist die Möglichkeit, mehrere Samples auf einmal aus dem Buffer zu lesen. Beispielsweise 150 Samples alle 0,1s...
Als CLAD solltest du das wissen!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.03.2013, 11:58 (Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2013 12:00 von jg.)
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: While Loop Performance
Dein Bsp.-VI hilft uns nur wenig bei der Lösung deines Problems.
Die Schleife läuft hat bei mir mehr als 11 Mio. Durchläufe pro Sekunde.

Gruß, Jens

P.S.: Was machst du alles in deinem realen Programm und bei der DLL-Abfrage?

EDIT: Gerds Rechner ist offenbar schneller als meiner. Sleepy

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.03.2013, 12:03 (Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2013 12:05 von Lucki.)
Beitrag #4

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: While Loop Performance
Bei mir, mit meinem mittelmäßigen AMD-Pozessor, schafft Dein VI mehr als 10e6 Durchläufe. Bei jeder neuen Version von LV wurde vor allem auch die Geschwindigkeit verbessert. Wahrscheinlich benutzt Du von Deinen verschiedenen LV-Versionen ausgerechnent die älteste.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.03.2013, 12:35
Beitrag #5

Diplomand Offline
CLAD
**


Beiträge: 184
Registriert seit: Jul 2007

8.50, 10.0, 11.0
2006
kA

58455
Deutschland
RE: While Loop Performance
Hallo,
vielen Dank für Ihre Antworten.
Leider ich habe einen fremden DLL mit dem ich die Werte aus der Hardware-Buffer auslese und der kann nur die einzelnen Werte auslesen, also es gibt keine Möglichkeit ganze oder teil Buffer zu lesen.
Weiter falls ich keinen delay in meine Weilschleife einbaue, dann ist die Prozesorlast um 80 % und die Lesezugriff über DLL auf der Buffer zu häufig,so dass der Programm nicht mehr richtig funktioniert.
Also noch einmal, ich brauche einen Lesezugriff von 1500 bis 2000 pro Minute, nicht mehrere Million Mals.

Schöne Grüße aus Dortmund
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.03.2013, 12:42 (Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2013 12:47 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: While Loop Performance
Hallo Diplomand,

mögliche Lösungen auf einem "stinknormalen" Windows-PC:
1. Lese 2 Werte pro Schleifendurchlauf und warte dann bis zur nächsten Millisekunde. Nachteil: Jitter...
2. Suche hier im Forum nach HPC ("High Performance Counter") oder "warten Mikrosekunden". Irgendjemand hatte mal ein (prozessorintensives) Beispiel gepostet, um auch unter Windows im Mikrosekundenbreich zu warten. Vorteil ggü. Lösung eins: geringfügig geringerer Jitter bei allerdings deutlich höherer CPU-Last.
3. Schreib dir eine Wrapper-DLL, um die Abfrage evtl. genauer zu takten und die Daten , wie vorgeschlagen, in einem Buffer zu sammeln...

Anmerkungen:
- Falls deine DLL einfach zu langsam ist (du schreibst: nur ~500 Durchläufe pro Sekunde"), wird die Schleife auch ohne Wartezeiten kaum schneller werden...
- Wartet der DLL-Call evtl. auf einen neuen Wert im Buffer? Oder bekommst du sofort den zuletzt gelesenen Wert zurückgemeldet?
Quintessenz:
- "Scheiß DLL" Big Grin
- Unter Windows ist es schwer, Schleifen unter 1ms zu takten. Und noch schwerer, dies mit geringem Jitter hinzubekommen...

Zitat:Lesezugriff von 1500 bis 2000 pro Minute
Reden wir jetzt über nur noch 25 bis 33 Hz Samplerate??? Dann ist das oben genannte hinfällig und du nimmst einfach eine Wartezeit von 40ms in die Schleife...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.03.2013, 12:54
Beitrag #7

Diplomand Offline
CLAD
**


Beiträge: 184
Registriert seit: Jul 2007

8.50, 10.0, 11.0
2006
kA

58455
Deutschland
RE: While Loop Performance
Hallo Gerd,
vielen Dank für deine Vorschläge, die werde ich gleich ausprobieren.

Zitat:Lesezugriff von 1500 bis 2000 pro Minute

Lesezugriff von 1500 bis 2000 pro Sekunde, mein Fehler.

Grüß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.03.2013, 13:28
Beitrag #8

BNT Offline
LVF-Freak
****


Beiträge: 744
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: While Loop Performance
Hi

Ich gebe mal ein paar Stichworte, den Rest musst Du selbst machen.

Einzelwertauslese via DLL in einer For-Schleife auslesen. Einzelwerte werden mit InPlace-Relace-Array-Element in einem Buffer-Array, das im aufrufenden VI mit der notwendigen Größe erzeugt wird, gesammelt. Dieses SubVI wird mit Priorität Subroutine aufgerufen.

Das Buffer Array wird auf allen Ebenen in Shift-Registern gehalten. Die gesammelten Daten können dann als Block weiterverarbeitet werden.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Probleme mit Performance (Berechnungen und Grafik) catbull 5 4.688 21.07.2018 10:13
Letzter Beitrag: IchSelbst
  Performance beim Betrieb über WLAN Heber 9 5.940 22.08.2017 14:28
Letzter Beitrag: Heber
  Parallel Port Read and Write Loop.vi rothhp 2 4.299 16.12.2015 16:08
Letzter Beitrag: rothhp
  While-loop Margi 2 3.336 21.09.2015 12:49
Letzter Beitrag: TDO
  For und While Loop katana 2 4.181 29.07.2015 11:14
Letzter Beitrag: Trinitatis
  While Loop Case überspringen PaulC 13 12.614 07.01.2015 15:13
Letzter Beitrag: GerdW

Gehe zu: