![]() |
CPU Auslastung - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: CPU Auslastung (/Thread-CPU-Auslastung--27591) |
RE: CPU Auslastung - Trinitatis - 08.05.2015 10:39 Bei einer überschaubaren Anzahl von Schleifen kannst du dir z.B. eine Verbindung vim Iterationsanschluss jeder Schleife auf einen Schleifentunnel ziehen (keine Autoindizierung!!) und auf diese Verbindung jeweils eine Sonde setzen. Dann siehst du recht schnell, welche Schleife in nullkommanix auf Millionen Umläufe anwächst. Gruß, Marko RE: CPU Auslastung - jg - 08.05.2015 10:42 40-60% ist doch schon ein (kleiner) Fortschritt gegenüber 80%. Alternative zu Markos Vorschlag: Mit vielen "Diagram Disable Structure" erst einmal alle Schleifen deaktivieren und dann schrittweise zuschalten, dann wird sich sicher der CPU-Fresser detektieren lassen. Gruß, Jens RE: CPU Auslastung - Agenth - 08.05.2015 15:25 (08.05.2015 10:39 )Trinitatis schrieb: Bei einer überschaubaren Anzahl von Schleifen kannst du dir z.B. eine Verbindung vim Iterationsanschluss jeder Schleife auf einen Schleifentunnel ziehen (keine Autoindizierung!!) und auf diese Verbindung jeweils eine Sonde setzen. Dann siehst du recht schnell, welche Schleife in nullkommanix auf Millionen Umläufe anwächst.Das habe ich bereits probiert, die Schleifen laufen unterschiedlich schnell - aber wie auch sonst? Wie lässt sich mein Programm dadurch optimieren? (08.05.2015 10:42 )jg schrieb: 40-60% ist doch schon ein (kleiner) Fortschritt gegenüber 80%.Das ist eine Möglichkeit, du hast recht! Werde ich nächste Woche wieder mal probieren. Habe bisher immer nur jeweils eine einzige Schleife über "Diagram Disable Structure" deaktiviert und geschaut, bin aber nicht großartig schlau draus geworden. Dein Tipp ist etwas sinnvoller ![]() Danke ihr beiden! RE: CPU Auslastung - Trinitatis - 08.05.2015 15:30 (08.05.2015 15:25 )Agenth schrieb: Das habe ich bereits probiert, die Schleifen laufen unterschiedlich schnell - aber wie auch sonst? Wie lässt sich mein Programm dadurch optimieren? naja, dass die Schleifen unterschiedlich schnell laufen kann ja auch gut sein. Wenn aber fast alle Schleifen nach 10s eine Iteration im Bereich von 1000-5000 aufweisen und eine Schleife 20000000, dann würde ich in dieser mal nachsehen. Es kann aber natürlich auch sein, dass es eben die Summe aus allen zu "schnell" laufenden Schleifen ist - dann wird´s schon schwieriger. Gruß, Marko Edit: Ich habe eben nochmal in dein VI gesehen. Ein m. Mn. nach grober Fehler ist schon die gesamte Pollerei in deinem VI. D.h. der Grundaufbau ist schon sehr fragwürdig. Wenn du also nun versuchst, alle Schleifen mit waits vollzupflastern und das VI irgendwann umfangreicher wird, dann wird´s immer suboptimaler. Su solltest dir mal das Prinzip der Producer-Consumer-Struktur ansehen. Dann würde dein VI auch deutlich übersichtlicher und später besser wartbarer. Gruß, Marko RE: CPU Auslastung - Agenth - 19.05.2015 09:00 Zitat:Wenn du also nun versuchst, alle Schleifen mit waits vollzupflastern und das VI irgendwann umfangreicher wird, dann wird´s immer suboptimaler. Su solltest dir mal das Prinzip der Producer-Consumer-Struktur ansehen. Dann würde dein VI auch deutlich übersichtlicher und später besser wartbarer. Danke für deine Antwort Markus. Leider fällt es mir schwer die Producer-Consumer-Struktur zu realisieren. Hat jemand Tipps für mich? Ein paar Screenshots zur Übersicht habe ich angefügt. RE: CPU Auslastung - GerdW - 19.05.2015 09:06 Hallo Agenth, Zitat:Hat jemand Tipps für mich?Weniger lokale Variablen, mehr Draht… Zitat:Ein paar Screenshots zur Übersicht habe ich angefügt.Eine Statemachine ist üblicherweise durch ein Schieberegister gekennzeichnet. Dies sehe ich in deiner Übersicht aber nicht… Hast du dir das Statemachine-Beispielprojekt angeschaut? Du verwendest da irgendwelche FGVs (GO_Tipp, MOVE, START) - die kennen wir nicht und die können wir nicht beurteilen! RE: CPU Auslastung - Agenth - 19.05.2015 09:39 Zitat:Eine Statemachine ist üblicherweise durch ein Schieberegister gekennzeichnet. Dies sehe ich in deiner Übersicht aber nicht…Ja habe ich, jedoch hat die Statemachine in meinem Fall nicht immer dieselbe Ablaufreihenfolge, deshalb Zählervariable "Aktueller Schritt". Zitat:Du verwendest da irgendwelche FGVs (GO_Tipp, MOVE, START) - die kennen wir nicht und die können wir nicht beurteilen!wird evtl. etwas übersichtlicher wenn man sich das ganze *.vi anschaut, das in den vorherigen Kommentaren eingebunden wurde. Das Problem ist, dass die CPU Auslastung drastisch steigt, wenn in der Schleife der Statemachine keine Schleifenverzögerung von 10 ms implementiert ist. Woran könnte das liegen, bzw. wie könnte man das beheben? RE: CPU Auslastung - GerdW - 19.05.2015 09:43 Hallo Agenth, Zitat:Ja habe ich, jedoch hat die Statemachine in meinem Fall nicht immer dieselbe Ablaufreihenfolge, deshalb Zählervariable "Aktueller Schritt".Häh? Wieso sollte eine Statemachine einen "immer festen Ablauf" haben? Zitat:Das Problem ist, dass die CPU Auslastung drastisch steigt, wenn in der Schleife der Statemachine keine Schleifenverzögerung von 10 ms implementiert ist.Manchmal sollte man auf Events warten - ständiges Polling ist nunmal sehr CPU-aufwändig! RE: CPU Auslastung - jg - 19.05.2015 09:47 (19.05.2015 09:39 )Agenth schrieb: Das Problem ist, dass die CPU Auslastung drastisch steigt, wenn in der Schleife der Statemachine keine Schleifenverzögerung von 10 ms implementiert ist.Das hatten wir doch schon! Wenn du ungebremst pollst, dann geht die CPU-Auslastung hoch! (05.05.2015 18:34 )jg schrieb: Das heißt noch lange nicht, dass die Auswertung auch mit 1kHz laufen muss.Gruß, Jens RE: CPU Auslastung - Agenth - 19.05.2015 09:49 Zitat:Häh? Wieso sollte eine Statemachine einen "immer festen Ablauf" haben?Sorry, so gut bin ich nicht im programmieren ![]() Ich habe es so verstanden, dass der nächste State als Schieberegister ausgewählt werden muss. In meinem Fall gibt es 5 States, welche aber in unterschiedlichen Reihenfolgen und auch mehrmals ausgeführt werden. Hast du vielleicht ein Beispiel das meinem Fall entspricht? Zitat:Manchmal sollte man auf Events warten - ständiges Polling ist nunmal sehr CPU-aufwändig!Ja das habe ich auch verstanden, jedoch ist mir unklar wie ich das eventgesteuert umsetzen kann? Zitat:- Die Betriebs-/Bewegungsarten-Schleife läuft im Modus "Leerlauf" ungebremst.leider in dem hochgeladenen Screenshot nicht drin. Da habe ich eine Schleifenbremsung in der gesamten while Schleife von 10ms und im unteren False Case beim Leerlauf eine 1ms Verzögerung implementiert. |