Processors
Intel® Processors, Tools, and Utilities
14561 Discussions

Detecting LP E-Cores on Meteor Lake in software

someHiker
Beginner
1,484 Views

I have a use case where I need to count the number of different core types on Intel Hybrid CPUs and designate which core is which type.

Prior to Meteor Lake we could distinguish between Performance and Efficiency cores in software by looking at CPUID.1Ah EAX[31-24] to determine the core type. The Low Power Efficiency Cores (LP E) use the same core architecture as the standard Efficiency cores so I cannot use that to distinguish between E and LP E-cores.

Meteor Lake places the LP E-Cores on the SoC tile and the P and E cores on the Compute tile. I thought about using CPUID.1Fh which includes some information about CPU tiles to find which cores were on which tile, but all cores on a Core Ultra 7 155H reported as being on the same tile.

Searching online I found someone else that had the same idea and encountered the same roadblock (https://twitter.com/InstLatX64/status/1741416428538941718). Their solution was to maybe hard-code some information about caches from what I can gather, I'm a bit unclear on it.

Is there a reliable and officially supported way to distinguish between E and LP E-cores with either CPUID or MSR values, or are lookups required for this?

 

0 Kudos
11 Replies
RamyerM_Intel
Moderator
1,412 Views

Hello someHiker, 


I just want to make sure I understand your inquiry correctly, you are looking for a way to distinguish between E and LP E-cores of the Core Ultra 7 155H CPU is that correct? By the way, may I please know what software were you using before in distinguishing the Performance and Efficiency cores? May I also please know the reason why you need this information? 


Ramyer M. 

Intel Customer Support Technician 


0 Kudos
someHiker
Beginner
1,394 Views

"... you are looking for a way to distinguish between E and LP E-cores of the Core Ultra 7 155H CPU is that correct"
Not just the Core Ultra 7 155H but Meteor Lake in general, and ideally a way to make this distinction across future CPU families that have a similar configuration. I’m looking for an API that will report if the CPU is in this configuration as without it lookups are required and those are expensive to maintain and test.

The APIs typically available to developers are through CPUID leaves and MSRs. CPUID information is often forward compatible across multiple generations of CPUs, but MSRs are often family specific but some concepts can carry forward across generations. I have access to documentation on the CPUID leaves and MSRs on Intel Meteor Lake CPUs and have not found a way to detect which cores are LP-E cores. I hoping a way exists to do this and I’ve just missed it.

 

"May I also please know the reason why you need this information?"
I work on software that reports information about Intel processors (amongst other things) and I would like that information to be as accurate and complete as possible. Without this information your E-cores and LP-E cores are categorized as just E-cores. While technically both types cores are “efficiency" cores, categorizing them this way could cause confusion and concerns with users of this software. If we look at a spec sheet for a Meteor Lake CPU we can see that Intel reports counts of the three core types (P, E, LP-E). I would like to have same capability in my software, with the additional requirement that I can report which core is of which type.

With the CPUID leaves currently available I was able to properly categorize P and E cores on Intel Performance Hybrid Architecture CPUs that were released prior to Meteor Lake (Intel 12th and 13th generation).

0 Kudos
RamyerM_Intel
Moderator
1,349 Views

Hello someHiker, 


Thank you for the detailed response. For now, I will be coordinating this request with our team and keep this thread posted for updates. 


Ramyer M. 

Intel Customer Support Technician 



0 Kudos
RamyerM_Intel
Moderator
1,270 Views

Hello someHiker, 


Upon coordinating with my team, we do need more information to help you. We want to ask, what can you see on your Meteor Lake (MTL) processors? How are you seeing or differentiating before using CPUID.1Ah EAX[31-24] register? Please let us know of the steps and share a screenshot so we can take a look at this for you. If you prefer to converse in a private message, let me know as well. Thank you!


Ramyer M. 

Intel Customer Support Technician


0 Kudos
someHiker
Beginner
1,200 Views

We are using the method described in this Intel document to interpret CPUID.1Ah EAX[31-24]. Here's a snippet:

"You can use the core type to determine if a logical processor is either an Efficient-core (E-core, also known as “Gracemont”) (20H), or a Performance-core (P-core, also known as “Golden Cove”) (40H)."

On Meteor Lake when running CPUID on each logical CPU (22 in total on the Core Ultra 7 155H) we see:

  • CPUID.1Ah EAX[31-24] with value of 40h (P-Cores)
    • Occurs on 12 logical CPUs (6 cores with hyperthreading)
  • CPUID.1Ah EAX[31-24] with value of 20h ("Gracemont' cores categorized as E-Cores in Intel 12th generation at least)
    • Occurs on 10 logical CPUs, no hyperthreading so there are 10 cores.
    • Six of these cores are E-Cores
    • Two of these cores are LP-E Cores

The Intel Software Developer's Manual breaks these down to 40h: "Intel Core" and 20h: "Intel Atom" which is not as descriptive as the above but applies to multiple CPU generations.

The Intel document with core classification mentions a few other things that could be used for applications optimizing for different use cases, including looking at the GetSystemCpuSetInformation EfficiencyClass field for the logical CPUs. In our testing on our Meteor Lake system the E-cores and LP-E cores share the same efficiency class in Windows 11. The SchedulingClass field (which has no description in the GetSystemCpuSetInformation docs) has four unique values across all 22 logical CPUs. It appears the two LP-E cores have been assigned the lowest value and are the only logical CPUs in this category, which could potentially be useful.

However, our software also runs in Linux so relying on OS-specific mechanisms would not be ideal even if they provided useful information. Also, it's unclear where the OS gets this information and that makes it hard to tell if it can be trusted. It raises questions like will this behave differently in Windows 10, it is dependent on certain drivers being installed, is it dependent on ACPI implementations that may be different on different motherboards. Ideally we can just ask the CPU about it.

0 Kudos
RamyerM_Intel
Moderator
1,157 Views

Hello someHiker,


Thank you for sharing this information. I will proceed in coordinating this back with our team for now and update this thread once a resolution is available. 


Ramyer M. 

Intel Customer Support Technician


0 Kudos
RamyerM_Intel
Moderator
942 Views

Hello someHiker, 


Thank you for patiently waiting. We have some recommendations for you to try. Kindly please execute the following: 


For each logical processor, execute:


CPUID Leaf 1A, Sub-leaf 0


If (EAX >> 24 == 0x20) // E-Core processor?


{


Core type = E-Core


CPUID Leaf 4, Sub-leaf 3 // Unified cache (i.e., L3 Cache) parameters


If (EAX == 0) // No L3 access?


Core type = LP E-Core


Else


Core type = E-Core


}


Else


{


Core type = P-Core


}


This should be documented as well in the CPUID section of the Intel Software Developer’s Manual. Let me know how it went. I will be waiting for your reply. 


Ramyer M.

Intel Customer Support Technician


0 Kudos
someHiker
Beginner
808 Views

Implementing code based on the above pseudo code works as expected to distinguish between the LP-E and E-cores at least on the limited Meteor Lake CPUs we have available, but I still have questions about the reliability of that method.

My questions are:

  1. Is it is safe to assume that Meteor Lake LP-E cores will never have an associated L3 cache?
    1. Is this described in documentation somewhere, if so where?
  2. Would that be safe to say for hybrid CPUs in generations past Meteor Lake in at least the near term (maybe this cannot be known at this time)?

You mentioned:

"This should be documented as well in the CPUID section of the Intel Software Developer’s Manual."

...by that did you mean the CPUID section contains the documentation on the L3 cache detection and the 1Ah leaf (discussed above), or are you saying that pseudo code (or something close to it) is somewhere in the Intel Software Developer's Manual? I looked at the latest version (March 2024) and didn't see anything along the lines of that pseudo code, but if it is in there somewhere then please provide the exact section number.

0 Kudos
RamyerM_Intel
Moderator
835 Views

Hello someHiker, 


How are you doing? I am just following up if our recommendation worked for you. Feel free to let me know in this post if you encounter any issues so we can assist you. I will be waiting for your reply.


Ramyer M.

Intel Customer Support Technician 



0 Kudos
RamyerM_Intel
Moderator
609 Views

Hello someHiker, 


For clarification on the first query, feel free to refer to this document: Intel® Core™ Ultra Processor Datasheet Volume 1 of 2 specifically on page 114, Figure 14.


Regarding the second question, could you please provide additional context or details? This will enable us to address your inquiry more effectively


I will be waiting for your reply. 


Ramyer M. 

Intel Customer Support Technician 


0 Kudos
RamyerM_Intel
Moderator
187 Views

Hello someHiker, 

 

As we have not heard a response from you in the past days, we will proceed in closing this case. Before we do so, I want to emphasize that that the solution provided in my previous post is tailored specifically for Meteor Lake processors and should not be considered a universal, future-proof method. It is important to emphasize that, at present, software updates are required with each new release to distinguish between LP E-Cores and E-Cores. Currently, there is no documented or officially sanctioned solution that can be deemed future-proof.

 

For Meteor Lake (MTL) processors in particular, it is necessary to initiate the verification process by checking the Family and Model ID obtained from CPUID Leaf 1:

 

• Family should be equal to 6

• Model ID should be either 0xAA or 0xAC

 

Should you have additional questions, feel free to create a new post as this thread will no longer be monitored. 

 

Ramyer .

Intel Customer Support Technician

 

0 Kudos
Reply