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!
ich habe ein VI erstellt (siehe VI2.png). Dort gibt es zwei Indicators.
Jeder der beiden Indicators ist in einer while Schleife. Der aktuelle i Wert
wird im Indicator ausgegeben.
Ich habe eine Intel Core 2 Duo CPU. Das bedeutet ich einen einen Prozessor mit zwei Kernen.
Wenn ich nun die beiden while Schleifen starte beträgt die CPU Auslastung 100 Prozent.
Wenn ich nur eine der beiden while Schlefen starte beträgt die CPU Auslastung 50 Prozent.
Das bedeutet jede Schleife stellt einen Thread dar. Jeder Thread bekommt einen Prozessorkern zugewiesen.
Das passt also soweit alles.
Nun habe ich ein weiteres VI erstellt (siehe VI1.png). Darin habe ich eine while
Schleife mit einem Signalverlaufsdiagramm. Die Werte bezieht das Diagramm aus
der i Varialben der while Schleife.
Wenn ich nun das Programm starte, dann beträgt die CPU Auslastung ungefähr 75%.
Das verstehe ich nun nicht. Ich hätte jetzt erwartet, dass die while Schleife einen
einzigen Thread wieder darstellt. Das heißt nur einer der beiden Prozessorkerne dürfte
mit der Abarbeitung des Programms beschäftigt sein. Wie kann es sein dass ein
Thread auf zwei Kernen arbeitet? Nach meinem Verständnis dürfte die CPU Auslastung nur
50% betragen. Es müsste nämlich einer der beiden Prozessorkerne zu 100% ausgelastet sein
und der zweite Prozessorkern zu 0%. Wieso ist dem nicht so?
Das Update eines Graphen in LabVIEW kostet "sehr viel" Rechenzeit. In deinem zweiten Beispiel machst du das ja, "ungebremst" schreibst du neue Werte in dein Chart. Nachdem LabVIEW (oder auch Windows) noch einen CPU-Kern, wird wohl der UI-Thread mit dem Update des Chart auf den anderen Kern ausgelagert.
Gruß, Jens
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!
Noch mehr Spekulation:
- LabVIEW kann sich zwar die Nutzung von Cores "wünschen" (d.h. einen Thread anlegen), aber auf welchem Core das Betriebssystem diesen ausführt, entscheidet es selbst. Und ob da mal zwischen den Cores gewechselt wird, liegt auch im Ermessensspielraum des OS.
- Selbst wenn du nur eine Schleife programmierst, hast du doch verschiedene Threads. Wie Jens schon ansprach, hast du mindestens einen Rechenthread und einen UI-Thread (der sich hauptamtlich um die Anzeige kümmert), welche nicht notwendigerweise auf dem gleichen Core laufen...