Hi Stephane,

On Oct 23, 2009, at 2:18 PM, stephane eranian wrote:

> Ken,
>
> On Fri, Oct 23, 2009 at 1:41 PM, Kenneth Hoste  
> <kenneth.ho...@ugent.be> wrote:
>>
>> The Intel documentation for Core i7 suggests that this is not the  
>> case
>> on Nehalem, i.e. uops fused through micro-fusion are counted as 2  
>> uops
>> (while macro-fused uops are counted as 1), like you mentioned above.
>>
>> We missed this point somehow in your first reply, sorry about that.
>>
>> Thus, in order to obtain sensible numbers, it does indeed seem that
>> we need to figure out the number of micro-fused uops in Core i7, and
>> subtract that from the UOPS_RETIRED.ANY count we have now...
>>
>> It seems like there is no event for directly counting retied micro- 
>> fused
>> uops
>> however (while there is for UOPS_RETIRED.MACRO_FUSED).
>>
>
>> Are we missing something? Should we be able to get counts for retired
>> micro-fused uops? If so, which event are you referring to? If not,  
>> any ideas
>> on how we can obtain uops_retired counts on Core i7 where micro-fused
>> uops are counted as 1?
>>
> It does not seem possible because you have 2 unknowns in the equation:
>
> uops_retired.any = uops_retired.normal + uops_retired.micro +
> 2*uops_retired.micro.
>
> You are missing micro and normal.
> I thought you could may be do it by comparing what goes in with what  
> comes out,
> but that would only give you the wasted uops (on the wrong  
> speculative path).
>
> I will on that some more.
> There are some information of interest in the Intel Optimization guide
> (Appendix B2).
>
> http://www.intel.com/Assets/PDF/manual/248966.pdf

We ended up using a pragmatic approach in order to obtaini
sensible retired uop counts on Core i7, which are comparable
to Core2 retired uop counts.

As stated above, the problem is that micro-fused uops are counted as 2  
in the
UOPS_RETIRED.ANY event (as opposed to the Core 2 event), and that there
is no way to obtain the retired micro-fused uops count separately.

We ended up by estimating the amount of micro-fused uops by counting the
number of issues uops, using UOPS_ISSUED.ANY and UOPS_ISSUED.FUSED.
We figured out that the UOPS_ISSUED.FUSED only counts micro-fused uops
as one.

That way, we can estimate the amount of micro-ops in UOPS_RETIRED.ANY
by using the UOPS_ISSUED.FUSED / UOPS_ISSUED.ANY ratio, and thus
correct the UOPS_RETIRED.ANY accordingly.

In short, we can use the following as an estimate for retired uops where
each type of uop (non-fused, macro-fused, micro-fused) is counted as  
one:

UOPS_RETIRED.ANY * (1 - UOPS_ISSUED.FUSED / UOPS_ISSUED.ANY)


I hope that makes sense....

greetings,

Kenneth





------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to