Entwickler-Ecke

Windows API - Threads gezielt auf CPUs / Hyperthreads verteilen


Alstar - Mo 24.07.06 20:51
Titel: Threads gezielt auf CPUs / Hyperthreads verteilen
Hallo Leute!
Ich möchte eine Software programmieren die auf allen denkbaren Hardwaresystemen möglichst effizient läuft. Dazu müsste ich verschiedene Threads (bei Multicore-Systemen) auf die einzelnen CPUs bzw. (bei Hyperthreading-Systemen) auf die verschiedenen Hyperthreads. Nun soll das aber nicht beliebig geschehen, sondern möchte ich, dass ganz bestimmte Threads auf der zweiten oder dritten Schiene laufen.
Nun meine Fragen. Erstens: Ist es möglich die Threads manuell auf die Cores zu verteilen? Zweitens: Wenn ja, wie? Drittens: Wie finde ich heraus, ob ein System einen Prozessor, einen Hyperthreading-Prozessor oder mehrere Prozessoren (Anzahl) hat?

Danke schonmal!
Alstar


Moderiert von user profile iconMotzi: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 24.07.2006 um 21:00


Spaceguide - Mo 24.07.06 21:00

Schau dir mal die Funktion SetThreadAffinityMask an.


Alstar - Mo 24.07.06 21:05

Okay, vielen Dank!
Werden die Hyperthreads des P4 auch als eigener Prozessorkern angesehen?

Alstar


Motzi - Mo 24.07.06 21:05

Anzahl CPUs: GetSystemInfo
Thread auf bestimmten CPUs ausführen: SetThreadAffinityMask und SetThreadIdealProcessor
Viruteller Prozessor (Hyperthreading) oder realer Processor: musst du mal googlen, da gabs IMHO ne ASM-Operation..


BenBE - Mo 24.07.06 22:31

Hi, wenn Du die Instruction CPUID meinst ... Die gibt immer die Logische CPU-Anzahl zurück ... D.h. bei einem DualCore bzw. HT-System 2 CPUs ... siehe ggf. auch die Omorphia-Unit OHWProcessors.pas [http://viewcvs.omorphia.de/omorphia/library/source/OHWProcessors.pas].


Motzi - Mo 24.07.06 22:44

Nein, es gibt auch eine spezielle CPUID Instruction die dazu gedacht ist virtuelle von physikalischen Prozessoren zu unterscheiden, um Multitasking zu optimieren, da ein virtueller Prozessor schließlich nicht dieselbe Leistung wie ein realer hat..!

Edit: ein Link dazu: http://www.intel.com/cd/ids/developer/asmo-na/eng/211924.htm?prn=Y


Alstar - Di 25.07.06 21:59

Okay. Vielen Dank für die Hilfe, das wird mir erstmal weiterhelfen :wink:

Alstar