Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread auf bestimmten CPU-Kern laufen lassen (https://www.delphipraxis.net/132631-thread-auf-bestimmten-cpu-kern-laufen-lassen.html)

Gargamel 16. Apr 2009 14:09


Thread auf bestimmten CPU-Kern laufen lassen
 
Hallo

Ich habe etwas mit Threads experimentiert. Funktioniert auch recht gut.
Jetzt frage ich mich, ob man für einen ganz bestimmten Thread festlegen kann, auf welchem CPU-Kern dieser laufen soll.

Läßt sich da etwas machen?

Yogu 16. Apr 2009 14:14

Re: Thread auf bestimmten CPU-Kern laufen lassen
 
:arrow: Wie den CPU-Cores Threads zuordnen mit SetThreadAffinityMask

Gargamel 16. Apr 2009 14:45

Re: Thread auf bestimmten CPU-Kern laufen lassen
 
OK, danke. Aber bei dieser AffinityMask blicke ich nicht durch.

Luckie 16. Apr 2009 14:46

Re: Thread auf bestimmten CPU-Kern laufen lassen
 
Ist doch in dem Thread erklärt. Un dwenn du es nicht verstehst, kannst du ja in dem Thread noch mal nachfragen.

quendolineDD 16. Apr 2009 15:14

Re: Thread auf bestimmten CPU-Kern laufen lassen
 
Zitat:

Zitat von Gargamel
OK, danke. Aber bei dieser AffinityMask blicke ich nicht durch.

Was verstehst du denn nicht? Eigentlich ist das ganz einfach und von Apollinius gut erklärt.

Code:
+------------+
| Kern | Bit |
|------------|
|  1   |  0  |
|------------|
|  2   |  1  |
|------------|
|  n  | n-1 |
+------------+
Somit kannst du nun mit SetAffinityMask eindeutig festlegen, auf welche Kerne verteilt wird.
(1 shl 0) or (1 shl 1) wäre für Kern 1 und Kern 2.

Edit: falls dir die Veroderung nicht klar ist, schau es dir mal in der Bitschreibweise an:
1 shl 0 = 1
1 shl 1 = 2
Code:
    00000001
or 00000010
____________
    00000011
============

Gargamel 16. Apr 2009 15:37

Re: Thread auf bestimmten CPU-Kern laufen lassen
 
Danke, jetzt wird langsam Licht.

Momentan sieht mein Code recht einfach aus, nämlich so:

Delphi-Quellcode:
Thread:=TMyThread.Create(false);
SetThreadAffinityMask(Thread.Handle, 1 shl 1);
Somit würde dieser Thread auf Kern 2 laufen. Richtig?

Da ich eine Core2Duo habe, erscheinen im Taskmanager (Systemleistung) unter "Verlauf der CPU-Auslastung" 2 Diagramme.
Wenn ich nun 1 shl 0 nehme, zeigt das rechte Diagramm eine fast volle Auslastung an. Bei 1 shl 1 hingegen das linke Diagramm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz