Ich arbeite an einem Tool, mit dem Schüler die Leistung ihrer Programmieraufgabe selbst bewerten können. Insbesondere ist das Programm, das sie schreiben, Multi-Threading und ich habe keine direkte Möglichkeit, die Anzahl der erstellten Threads zu beeinflussen. Ich würde gerne die Leistung ihrer Programme bei einer anderen Anzahl von Kernen vergleichen (und idealerweise sollten ihre Programme ungefähr proportional dazu ansteigen, wie viele Kerne es benutzen darf).Wie ermittelt man, welche logischen Kerne den gleichen physischen Kern teilen?
Wir können eine Bitmaske an Process.SetAffinity übergeben, um zu steuern, welche Cores das Programm verwendet.
Dies ist problematisch auf i5 und i7-Maschinen, die Hyper-Threading verwenden und jeden physischen Kern in zwei logische aufteilen. Ich möchte, dass das Programm auf zwei oder vier verschiedenen physikalischen Kernen läuft. Auf meiner i7-Maschine läuft ein Prozess mit einer Affinität von 3 (Kerne 0 & 1) ungefähr so schnell wie das Programm auf einem einzelnen Kern (zeigt an, dass diese logischen Kerne den gleichen physischen Kern haben), aber mit einer Affinität von 5 (Kernen) 0 & 3) es wird viel schneller laufen (zeigt an, dass diese Kerne verschiedene physische Kerne verwenden). Ich habe jedoch keinen zuverlässigen Weg gefunden (außer Versuch und Irrtum), um dies zu bestimmen.
Wie kann ich (ohne Experimente) feststellen, welche logischen Kerne den gleichen physischen Kern haben?
(/ proc/cpuinfo hat die Informationen, die ich brauche, aber das ist auf Windows-Rechnern nicht verfügbar.)
Die Informationen sind wahrscheinlich verfügbar über [WMI (Windows Management Instrumentation)] (http://en.wikipedia.org/wiki/Windows_Management_Instrumentation) - oder zumindest die Anzahl der physischen/virtuellen Kerne, die es * könnte * gültig sein, um in eine verschachtelte Bitmaske zu extrapolieren. – user2864740
Es sieht so aus, als hätte ich vergessen zu erwähnen, dass ich speziell nach einer C# Lösung suche. Ich habe das C# -Tag hinzugefügt, aber ich habe es nirgends erwähnt. Ich habe jetzt C# im Titel hinzugefügt, was es ein bisschen klarer machen sollte, wonach ich suche. –
@TomvanderZanden Sie sollten 'C#' nicht zum Titel hinzufügen. Tag sollte genug sein. Wenn es nicht ist, machen Sie es in Ihrer Frage deutlich. – MarcinJuraszek