AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Problem mit E-Cores und P-Cores bei neueren CPUs
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit E-Cores und P-Cores bei neueren CPUs

Ein Thema von johndoe049 · begonnen am 23. Jan 2024 · letzter Beitrag vom 23. Jan 2024
Antwort Antwort
johndoe049

Registriert seit: 22. Okt 2006
169 Beiträge
 
#1

Problem mit E-Cores und P-Cores bei neueren CPUs

  Alt 23. Jan 2024, 12:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 23. Jan 2024, 13:49
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
johndoe049

Registriert seit: 22. Okt 2006
169 Beiträge
 
#3

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

  Alt 23. Jan 2024, 14:00
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 23. Jan 2024, 14:36
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Jan 2024 um 15:41 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#5

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

  Alt 23. Jan 2024, 15:27
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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