I was wrong.
Yigal Chripun
yigal100 at gmail.com
Thu Aug 14 13:17:57 PDT 2008
Jb wrote:
> "superdan" <super at dan.org> wrote in message
> news:g81o61$21bs$1 at digitalmars.com...
>> Jb Wrote:
>>
>>> "superdan" <super at dan.org> wrote in message
>>> news:g81e1l$18js$1 at digitalmars.com...
>>>> downs Wrote:
>>>>> Null: 729908
>>>>> Naive: 1615314
>>>>> Speculative for B: 1692860
>>>>> Speculative for B/C: 1664040
>>>> the whole premise of speculation is it oils the common path. you have
>>>> uniform probabilities.
>>>> what you gain on speculating for B you lose in the extra test when
>>>> misspeculating on others.
>>>> so to really test speculation make B like 90% of cases and retry.
>>> To speculate localy you still have to lookup the class info, compare it
>>> to
>>> the speculated object type, and then conditionaly branch. You cant avoid
>>> a
>>> conditional branch, and as it will share the same pattern as the indirect
>>> jump, and (in most cases) the same prediction mechanism, neither will be
>>> better predicted than the other.
>> no that's wrong. conditional branch is better speculated than indirect
>> jump.
>> they share no other hardware than the instruction fetching pipe.
>
> Sorry but you dont know what you are talking about. Indirect jumps get a
> slot in the branch target buffer (BTB) the same as conditional branches.
> They both share the same target prediction hardware. It's not only a fact
> it's also common sense that they would do so.
>
> http://www.agner.org/optimize/microarchitecture.pdf
>
> Read the chapter on branch prediction.
>
> http://www.intel.com/design/processor/manuals/248966.pdf
>
> Read Chapter 3.4.1.6
>
>
>> the mechanism for conditional branch speculation is that stuff is executed
>> in parallel
>> on both branches inside the pipeline. the branch that makes it is
>> committed. the other
>> is retired without getting to write to the register file or memory.
>
> Actualy AFAIK no current x86 processor *execute* both branches. What does
> happen is the instruction cache will *prefetch* both branches, so that when
> the BTB decides which way to go it has the instruction data ready.
>
> But it will still cost you a whole pipeline flush if the prediction was
> wrong.
>
>
>>> So the point is that you cant make the common path any faster unless you
>>> actualy *inline* the speculated method. In fact if you dont inline you
>>> are
>>> most probably making the situation worse because you are replacing
>>> this...
>> you are right here tho for the wrong reasons :) yeah speculation is good
>> if there are
>> a few good chunky instructions to eat while speculating. if it's a
>> function call that in
>> turn is just a ret... the results are nothing to write home about. as it's
>> been shown.
>
> No.. erm NO... and NOOooOOOO!!!!
>
> ;-)
>
> Speculation is good if it allows you to inline the method and chop out a
> whole bunch of register shuffling, stack setup, and entry / exit code.
>
> It's got naff all to do with "having shit to do" while you're speculating.
> Just like it's got naff all to do with conditional branches being faster /
> better predicted than indirect calls.
>
>
I think Superdan is just too old ;)
What he is talking about is probably the way things worked in P4 and
that design was canceled for many good reasons. As Jb says above, No
current x86 processor *execute* both branches.
My Digital Systems professor works at Intel here in Israel where they
design the chips ;) and he taught us the same thing Jb said above.
More information about the Digitalmars-d
mailing list