Mehr Prozessorkerne nutzen
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Mehr Prozessorkerne nutzen
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?
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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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
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
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
Das mit der Wartezeit hat geholfen
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
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)
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
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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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
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
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
Die Messung sieht momentan so aus (schon stark vereinfacht --> alles was bremst wie z.B eine grafische Anzeige hab ich da entfernt)
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?
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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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.
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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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.
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
Also die Messwerte direkt nach aussen führen und dann dort mit Replace Array Subset einfügen?
Das probier ich gleich mal aus :)
Das probier ich gleich mal aus :)
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
Nein, es geht ohne Replace Subset. Ich meine so:Maddin писал(а):Also die Messwerte direkt nach aussen führen und dann dort mit Replace Array Subset einfügen?
Das probier ich gleich mal aus :)
- Вложения
-
- Indexing.png (2.24 КБ) 8936 просмотров
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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.
Mach diese Anzeigen weg, oder wenn du es wirklich brauchst, musst du es umprogrammieren.
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
scheint zu funktionieren
Ich habe das vorher so gemacht Aber wenns auch einfacher geht: warum nicht
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 (hab die eigentlich nur zur Kontrolle drin damit man sieht ob die Daten übertragen werden)
Ich habe das vorher so gemacht Aber wenns auch einfacher geht: warum nicht
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 (hab die eigentlich nur zur Kontrolle drin damit man sieht ob die Daten übertragen werden)
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
Ja, die Abfrage der Daten vom Sensor dauert ja auch eine bestimmte Zeit, diese Zeit kannst du aber nicht beeinflussen.
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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.
-
- junior
- Сообщения: 57
- Зарегистрирован: 21 авг 2008, 13:22
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Mehr Prozessorkerne nutzen
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