Mehr Prozessorkerne nutzen

Allgemeine Themen, die in andere Unterforen nicht passen
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Mehr Prozessorkerne nutzen

Сообщение Maddin »

Hallo zusammen,

Ich habe (mal wieder) ein kleines Problem bei dem ich nicht weiterkomme:
Das von mir erstellte Programm ist soweit fertig, jedoch dauert die Abarbeitungszeit viel zu lange.
Ich habe daraufhin mal im Taskmanager nachgeschaut und festgestellt, dass Labview nur einen Prozessor (von 4) benutzt.
Wie kann ich da mehr Prozessoren nutzen?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Ich glaube auf die Prozessoren hat man in LabVIEW keinen Einfluss, LabVIEW regelt die CPU-Ausnutzung selbst.

Aber zu deinem Problem: wieso denkst du, dass dein Programm mehr CPU gebrauchen könnte? Normale Proggramme sollten nur 1-2% einer CPU fressen. Meine Programme sind zumindest so. Und du kannst mir glauben, dass ich schon eine Menge Projekte gemacht habe. Einige meiner Programme haben gleichzeitig mit 8 Geräten bei bis zu 400 Hz über unterschiedliche Buse und Schnittstellen kommuniziert.
Das einzige Problem mit CPU hatte ich bei einem Videoprojekt mit Aufzeichnen von Videos über WDM Treiber mit Benutzung des XVID Komprimierers.

Ich denke dein Problem liegt wohl in den Schleifen, die keine Wartezeit haben. Prüfe bitte jede While- und For- Schleife in deinem Programm und setze in jede Schleife mindestens 5 ms Verzögerung. Diese Verzögerung wirst du als Benutzer nicht merken, aber sie entlastet die CPU gewaltig.

Gruß, eg
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Maddin »

Das mit der Wartezeit hat geholfen :super:
Ich habe eigentlich gedacht, dass die Messwertverarbeitung so rechenintensiv ist und deshalb 100% Prozessorlast verursacht.
Macht die eingefüge Wartezeit das ganze nicht noch langsamer? Ich habe nämlich ca 50.000 Messwerte die ich aufnehmen und verarbeiten muß und das soll insgesamt nicht länger als 15 Sekunden dauern. Wenn ich dann pro Schleifendurchlauf nochmal 5ms Wartezeit habe müsste das ja dann die ganze Messung zusätzlich um 250.000 ms verlangsamen :shok:

Hab das gerade mal getestet: mit 1 ms Wartezeit wurde die Messung tatsächlich um 50 Sekunden langsamer.
mit 0 ms ging die Prozessorauslastung auf einem Kern zwar wieder hoch (nicht ganz 100% diesmal), aber die Messung dauerte damit nur 28 Sekunden (das ist zwar auch noch zu lang, aber schon näher am Zielergebnis)
Последний раз редактировалось Maddin 04 сен 2008, 12:37, всего редактировалось 1 раз.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Also man sollte schon Programmiererfahrung und Überblick über das Programm haben um genau zu sagen wo man die Wartezeit eingügt und wo nicht. Ich denke 50.000 Messwerte sind schnell umgerechnet und es sollte weniger als 15 Sekunden dauern. Na ja, es kommt halt auf die Komplexität der Berechnung an. Also gerade dort, wo du diese Berechnung machst würde ich keine Wartezeit einfügen, aber an allen anderen Stellen.
Denn es kann sein, dass die Berechnenschleife von einer anderen parallelen Schleife stark abgebremst wird, weil diese andere parallele Schleife keine Wartezeit drinne hat.

Hoffentlich verständlich erklärt, eg
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Maddin »

Die Messung sieht momentan so aus (schon stark vereinfacht --> alles was bremst wie z.B eine grafische Anzeige hab ich da entfernt)
messung.JPG
Die flache Sequenzstruktur benötige ich im Programm, da sonst Fehlermeldungen bezüglich der "Sensor-VI`s" kommen.
Kannst du mir das sagen was genau die Messung so langsam macht?
Liegt das an dem Schieberegister in dem ich die ganzen Messwerte abspeichere, oder ist der Aufbau so vom Prinzip her in Ordnung?
(Es werden 2 Sensoren parallel ausgelesen und die Messwerte verarbeitet --> es handelt sich also insgesamt um 100.000 Messwerte, aber selbst das müsste eigentlich schneller gehen)

--> können bei so einer Struktur überhaupt noch parallel schleifen laufen?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Also das allererste was mir einfällt ist der Zahlenformat Double von deinen Schieberegistern. Du bekommst aber von Sensor einen I32 Wert. Ändere das Zahlenformat des Schieberegisters auf das I32, dann soll es schon doppelt so schnell laufen.

Das nächste ist, dass dein Array immer wieder neuen Speicher anfordert, weil du Build Array benutzt um die Daten in die Schieberegister einzufügen. Das Speicherallokieren braucht auch eine gewisse Zeit. Du kannst lieber dein Array gleich am Anfang, bevor die Schleife anfängt zu laufen allokieren und dann in der Schleife die Werte ersetzen mit Replace Array Subset.

Mache das zuerst, dann schauen wir weiter.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Ne, sorry, du brauchst gar keine Schieberegister. Du kannst direkt aus der Schleife ein Array bekommen, wenn du am Ausgang der Forschleife (mit Rechtsklick) das Indexing einschaltest.
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Maddin »

Also die Messwerte direkt nach aussen führen und dann dort mit Replace Array Subset einfügen?
Das probier ich gleich mal aus :)
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Maddin писал(а):Also die Messwerte direkt nach aussen führen und dann dort mit Replace Array Subset einfügen?
Das probier ich gleich mal aus :)
Nein, es geht ohne Replace Subset. Ich meine so:
Вложения
Indexing.png
Indexing.png (2.24 КБ) 8930 просмотров
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Und ja, gleich noch ein Tipp. In der Schleife gibst du den aktuellen Sensorwert auf die numerische Anzeige. Das ist bei dieser hochen Anzeigefrequenz nicht sinnvoll, denn der Benutzer wird den Wert nicht sehen können, da es sehr sehr schnell sich ändert. Für die CPU ist es aber sehr belastend, denn es ist ja eine grafische Ausgabe. Da muss LabVIEW sehr viel machen, dann Befehl an das Betriebssystem schicken und das Betriebssystem muss dann dieses Stück Fenster, wo die Anzeige ist updaten oder besser gesagt neuzeichnen. Und das bei dieser hohen Frequenz. Da geht bestimmt dein CPU hoch. Insbesondere wenn die Anzeige und die Schrift in der Anzeige noch richtig gross ist.

Mach diese Anzeigen weg, oder wenn du es wirklich brauchst, musst du es umprogrammieren.
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Maddin »

scheint zu funktionieren :super:

Ich habe das vorher so gemacht
messung neu.JPG
Aber wenns auch einfacher geht: warum nicht :D

Das Problem dabei ist nur: die Messung wird dadurch nicht schneller (bleibt bei 28 sekunden)
--> das kann dann ja fast nur an der "transfer Data" funktion liegen.

Edit: Ok die Anzeigen fliegen auch raus :D (hab die eigentlich nur zur Kontrolle drin damit man sieht ob die Daten übertragen werden)
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Ja, die Abfrage der Daten vom Sensor dauert ja auch eine bestimmte Zeit, diese Zeit kannst du aber nicht beeinflussen. :think:
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Maddin »

noch eine Frage: würde das ganze auch mit einer "While-Schleife" funktionieren (bzw. am besten mit einer Zeitgesteuerten While-Schleife, die nach 5 Sekunden automatsich stoppt? )
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Eugen Graf »

Ja, klar. Du kannst auch weiterhin die Forschleife verwenden, da gibt es ab LV 8.5 eine Stop Funktion. Rechtsklicken auf den Rand der Forschleife und Enable Conditional Stop (weiss nicht genau wie es heisst) auswählen.
Maddin
junior
junior
Сообщения: 57
Зарегистрирован: 21 авг 2008, 13:22
Версия LabVIEW: 8.5
Контактная информация:

Re: Mehr Prozessorkerne nutzen

Сообщение Maddin »

Hab das jetzt mal mit einer Whileschleife und einem Timer versucht, aber das funktioniert nur einmal. Ab dem zweiten Durchlauf scheint der Timer nicht mehr zu zählen :dntknw:
Timer.JPG
Ответить

Вернуться в «Allgemein»