2010-07-29 5 views
5

Ich würde gerne wissen, ob es möglich ist zu identifizieren, physischen Prozessor (Kern) wird von Thread mit bestimmten Thread-ID verwendet?Identifizieren Prozessor (Kern) wird von bestimmten Thread verwendet

Zum Beispiel habe ich eine Multithread-Anwendung, die 2 Threads (Threadid = 10 und Threadid = 20, zum Beispiel) hat. Ich führe die Anwendung auf einem System mit einem Dual-Core-Prozessor (Core 1 und Core 2). Also, wie man die Anzahl der Kern kennenlernen wird von Thread mit Threadid = 20 verwendet?

P.S. Windows-Plattformen.

Vielen Dank,

Denis.

Antwort

3

Sofern Sie keine Thread-Affinität verwenden, werden Threads keinen bestimmten Kernen zugewiesen. Mit jeder Zeitscheibe kann der Thread auf verschiedenen Kernen ausgeführt werden. Dies bedeutet, dass, wenn es eine Funktion zum Abrufen des Kerns eines Threads geben würde, die Wahrscheinlichkeit groß ist, dass der Thread bereits in einem anderen Kern ausgeführt wird, wenn Sie den Rückgabewert erhalten.

Wenn Sie Thread-Affinität verwenden, können Sie sich die Windows-Thread-Affinity-Funktionen (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx) ansehen.

+0

Vielen Dank für Ihre Antwort, Patrick! Es taucht also eine andere Frage auf - ist es möglich zu erfahren, wie viel Zeit ein bestimmter Thread auf einem bestimmten Kern läuft? (Zum Beispiel läuft ein Thread 20% seiner Zeitscheibe auf Kern 1 und 80% seiner Zeitscheibe läuft auf Kern 2) – DenisL

+0

Nicht dass ich Denis kenne. Sie können einen Thread auf bestimmte Kerne beschränken (dies wird als Thread-Affinität bezeichnet). Vielleicht können Sie Ihren Prozess in mehrere Threads aufteilen, wobei jeder Thread einem Kern zugewiesen wird. Kannst du erklären, was das ursprüngliche Problem ist? (was zu Ihrer ursprünglichen Frage führt) Vielleicht kann Ihr Problem auf andere Weise gelöst werden. – Patrick

+0

Ich wurde beauftragt, zwei Funktionen zu erstellen: 1. Die erste Funktion gibt die gesamte Multicore-Prozessor-Nutzung durch spezifische Thread-ID zurück. Ich habe die Funktion mit Leistungszählerfunktionen implementiert. 2. Die zweite Funktion gibt spezifische Kernnutzung durch spezifische Thread-ID zurück. Ich habe keine Ahnung, wie man die Funktion erstellt, es scheint unmöglich zu sein. – DenisL

2

Es gibt Funktionen namens GetCurrentProcessorNumber (verfügbar seit Server 2003 und Vista) und GetCurrentProcessorNumberEx (verfügbar seit Server 2008 R2 und Windows 7).

Siehe auch this question's answers für weitere verwandte Optionen und Überlegungen (einschließlich Windows XP - in erster Linie this answer describing the use of cpuid instruction).

Natürlich kann die Kernnummer jederzeit vom Scheduler geändert werden, wenn Sie also sicher sein müssen, dann hilft es vielleicht für einen angemessenen Betrag, wenn Sie die Kernnummer vor und nach etwas messen oder kurz ausführen Menge an Zeit, und wenn die Kernnummer immer noch gleich ist, dann wissen Sie, auf welchem ​​Kern höchstwahrscheinlich der Zwischencode auch ausgeführt wurde.

Verwandte Themen