Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: cmov isn't necessarily good

Author: Robert Hyatt

Date: 11:48:09 07/20/03

Go up one level in this thread


On July 19, 2003 at 02:11:34, Tom Kerrigan wrote:

>On July 19, 2003 at 01:11:31, Robert Hyatt wrote:
>
>>On July 18, 2003 at 15:16:27, Tom Kerrigan wrote:
>>
>>>On July 18, 2003 at 04:05:52, Walter Faxon wrote:
>>>
>>>>>; 326  :     if (bbHalf) bb0 = bb1;              // will code as cmov (ideally)
>>>>>
>>>>>	test	ecx, ecx
>>>>>	je	SHORT $L806
>>>>>	mov	eax, DWORD PTR _bb$[esp]
>>>>>$L806:
>>>>>
>>>>
>>>>
>>>>Stupid compiler, not only no cmov
>>>
>>>IIRC, on the P6 (Pentium Pro, Pentium II, Pentium III), the cmov instruction
>>>gets translated into a string of uOps that's equivalent to testing, branching,
>>>and copying.
>>>
>>>In other words, there is no performance benefit (I believe there may actually be
>>>a performance penalty) to using cmov on a P6, and it breaks compatibility with
>>>pre-P6 processors, so it's little wonder the P6-era MS compiler doesn't generate
>>>cmovs.
>>>
>>>-Tom
>>
>>
>>I think the point is that the cmov eliminates any possibility of a branch
>>mis-prediction.  On the long PIV pipeline, that's a significant savings for
>>mis-predicted branches.
>>
>>Since Eugene's example shows that the new MSVC compiler is going to finally
>>emit cmov instructions, I'd assume there is a performance gain for doing
>>so.
>
>Yes, of course, I thought I had made it perfectly clear that I was talking about
>the _P6_ core. I wrote all of them out. Pentium Pro, Pentium II, Pentium III.
>_Not_ Pentium 4.
>
>-Tom

I don't see why it would be worse on a P6 core either.  IE on a P6, if the
branch is mis-predicted, you _still_ have to back out all the stuff that has
been speculatively executed, including any out-of-order stuff as well.  The
CMOV eliminates a lot of that.

I haven't tried it on every machine, but I have tried it on several, and it has
always been somewhat faster for me.  How much faster seems to have a bit of
witchcraft and superstition involved.  But it was always faster, to some degree.

I'd be happy to try a particular benchmark if you have one.  I'm sure the
effectiveness of the instruction is somewhat coupled to the instructions it
is stuck in the middle of.



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.