Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit E-Cores und P-Cores bei neueren CPUs (https://www.delphipraxis.net/214517-problem-mit-e-cores-und-p-cores-bei-neueren-cpus.html)

johndoe049 23. Jan 2024 11:42

Problem mit E-Cores und P-Cores bei neueren CPUs
 
Da neuere CPUs mit Performance und Efficience cores ausgestattet sind, haben wir das Problem, dass unsere Berechnungsprogramme alle nur auf E-Cores laufen.

Ist uns erst jetzt aufgefallen, da wir erst vor kurzem neue PCs gekauft haben.

Gibt es eine Möglichkeit/API für Windows und Linux, dass man der CPU oder dem Betriebssystem mitteilen kann, auf welchen Kernen die Software arbeiten soll?

Das Problem haben wir im Moment auf Windows festgestellt, Linux wird erst später geändert. Daher vorsorglich auch für Linux gefragt.

Danke im voraus.

himitsu 23. Jan 2024 12:49

AW: Problem mit E-Cores und P-Cores bei neueren CPUs
 
Es gibt zwar die Möglichkeit eine Maske anzugeben, auf welchem "Virtuellen" Kern(en) ein Prozess, bzw. Thread laufen soll,
aber ich hatte jetzt noch nichts gesehn, wie man überhaupt erkennt, was P und E ist, also in der Win32-API. Selbst der Taskmanager sagt ja nicht was was ist.

johndoe049 23. Jan 2024 13:00

AW: Problem mit E-Cores und P-Cores bei neueren CPUs
 
Zitat:

Zitat von himitsu (Beitrag 1532435)
Es gibt zwar die Möglichkeit eine Maske anzugeben, auf welchem "Virtuellen" Kern(en) ein Prozess, bzw. Thread laufen soll,
aber ich hatte jetzt noch nichts gesehn, wie man überhaupt erkennt, was P und E ist, also in der Win32-API. Selbst der Taskmanager sagt ja nicht was was ist.

Unsere Berechnungsprogramme laufen auf den letzten angezeigten Kernen und sind sehr langsam. Im Zusammenhang mit VMWare und Virtualbox hat einer bei uns im Internet Berichte gefunden, dass die Effizenz Kerne die letzten Kerne sind. Also die mit der höchsten Prozessor ID.

Kann man die Maske als Startparameter angeben oder kann man das direkt in den Sourcecode mit einbinden (dann müsste man bei jedem Start auch die Prozessoranzahl prüfen und die letzten 4-8 Kerne deaktivieren - sofern Intel überall 4 E-Kerne + Hyper Threading verbaut hat).

Irgendein Muster, wie und wo man die Maske angibt?

himitsu 23. Jan 2024 13:36

AW: Problem mit E-Cores und P-Cores bei neueren CPUs
 
Bei mir läuft alles meistens in den ersten 8 von 16.

Wenn ich aber genug Threads erstelle (so viele wie Kerne minus 1), dann läuft es auf allen.
siehe https://www.delphipraxis.net/214506-...ml#post1532401

Win11 i7-1260p
Was ich bei Win11 nur bemerkt hab (k.A. ob es vorher schon war), dass meine Prozesse/Threads alle 30 sekunden auf einen anderen Kern verschoben werden (vermutlich um die Wärmebelastung zu verteilen)


MSDN-Library durchsuchenSetThreadAffinityMask
MSDN-Library durchsuchenSetProcessAffinityMask
Im Prinzip ist es eine Bitmaske.
1. Bit = erster Kern

MSDN-Library durchsuchenGetLogicalProcessorInformation
MSDN-Library durchsuchenGetLogicalProcessorInformationEx

Aber vielleicht erstmal schauen, ob z.B. die Priorität etwas ändert (kannst auch erstmal testweise im Taskmanager damit rumspielen)
Delphi-Referenz durchsuchenTThread.Priority bzw. MSDN-Library durchsuchenSetThreadPriority
MSDN-Library durchsuchenSetProcessPriorityBoost


[add]
Ahhh, AIDA war es, welches dir anzeigt, was welcher Kern ist. (meinte Golem grade)
Grade gemerkt, dass Vieles im akuellen Win11 garnicht mehr läuft, oder fast nix mehr anzeigt, weil die Teiber nicht gestartet werden.
CPUID, CPU-Z, HWiNFO und CrystalCPUID

Win11 > Taskleiste > Batterie > im Popup auf die Batterie und dort Energiestatus
Das dürfte eine Auswirkung haben, in welchem Modus die Cores benutzt werden.

https://www.golem.de/news/bitsum-cor...11-179601.html

mytbo 23. Jan 2024 14:27

AW: Problem mit E-Cores und P-Cores bei neueren CPUs
 
Zitat:

Zitat von johndoe049 (Beitrag 1532432)
Gibt es eine Möglichkeit/API für Windows und Linux, dass man der CPU oder dem Betriebssystem mitteilen kann, auf welchen Kernen die Software arbeiten soll?

Vielleicht findest du im mORMot Quelltext Hinweise. Es gibt die Funktionen SetThreadMaskAffinity, SetThreadCpuAffinity und SetThreadSocketAffinity. Im Server für den TechEmpower Benchmark wird es verwendet.

Bis bald...
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 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