View Full Version : Intel Alder Lake - How to check which logical CPU is P-CORE or E-CORE?
Atak_Snajpera
7th October 2021, 13:17
Do you guys have any idea how we could programmatically determine which logical processor belongs to Golden Cove cores and which to Gracemont cores?
LoRd_MuldeR
7th October 2021, 20:31
Do you guys have any idea how we could programmatically determine which logical processor belongs to Golden Cove cores and which to Gracemont cores?
Are the P-/E-cores even "visible" as separate cores to the OS and/or applications? :confused:
To my understanding, they said there will be a hardware unit, the so-called "Thread Director", which decides which thread should run on which type of core. So maybe this is completely "transparent" to the OS and/or applications.
I would think that if all the P-/E-cores were "visible" as separate cores, then most existing applications would probably create #P + #E threads, i.e. they would be loading all the P- and all the E-core at the same time.
But that's almost certainly not what is desired. What you'd want is that applications create only #P threads, so that these can be moved between the P-/E-cores as needed.
Anyways, if P-/E-cores actually are "visible" as separate cores, then maybe GetLogicalProcessorInformationEx (https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformationex) will provide that info – possibly with some new extensions (available in Windows 11 only). Either that, or some CPUID (https://en.wikipedia.org/wiki/CPUID) magic ;)
(Also possible that M$ adds some kind of "compatibility" layer for legacy applications that hides the details of P-/E-core and makes them "visible" only to new P-/E-core aware applications)
Atak_Snajpera
8th October 2021, 08:56
I'm pretty sure that all cores will be visible in system like in lakefield
https://ithardware.pl/admin/ckeditor/filemanager/userfiles/DanielGorecki/2020/czerwiec/lakefield_multi_core_load.jpg
LoRd_MuldeR
11th October 2021, 00:28
Interestingly, task-manger shows 5 separate CPU graphs, but it also shows "100%" CPU load even though only 4 of 5 cores are utilized ;)
And, how comes that Cinebench, apparently, only uses 4 of 5 cores? :confused:
I really have no idea what "NumberOfProcessors" an API like GetSystemInfo() (https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsysteminfo) would report on such system. Or how many processors the "SystemAffinityMask" of GetProcessAffinityMask() (https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask) would indicate.
Assuming that all E- and P-cores are actually "visible" as separate (logical) cores to applications:
What should the number of threads that an application, such as video encoder, creates be based on? The number of P-cores or the total number of E- and P-cores? On the one hand, the more threads we can run in parallel the better – even if some threads run significantly slower due to being assigned to an E-core. On the other hand, the threading implementation of pretty much all existing applications is based on the assumption that all threads run (approximately) at the same speed. If, all of a sudden, some threads run significantly slower than others, it could result in the "fast" threads stalling all the time, because they have to wait for results from "slow" threads :eek:
Atak_Snajpera
11th October 2021, 17:22
According to anandtech system scheduler is programmed to use logical processors in this order:
Use P-CORE then
Use E-CORE then
Use SMT on P-CORE
BTW. lakefield was odd indeed because P-CORE was only used if you were doing strictly single threaded task like launching program. Lakefield was described by anandtech like 4+1 (E-CORE + P-CORE). System barely used all 5 cores at 100% during multithreaded computations.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.