ConditionProfile vs. BranchProfile
Christian Humer
christian.humer at gmail.com
Tue Jul 5 13:19:17 UTC 2016
I'd like to add that branch probabilities are useful for some Graal
optimizations like Partial Escape Analysis, where allocations are pushed
into infrequent pathes.
This is something Graal can only do if you inject branch probabilities
using a counting condition profile.
Cheers,
Christian Humer
On 05.07.2016 15:12:59, "Chris Seaton" <chris.seaton at oracle.com> wrote:
>If you were to write
>
>a = new BranchProfile();
>b = new BranchProfile();
>
>if (c) {
> a.enter();
> …
>} else {
> b.enter();
> …
>}
>
>Then that’s almost the same thing as a ConditionProfile. So that’s
>useful on its own - it’s less code and less data than using two
>BranchProfiles.
>
>As you say, ConditionProfile also introduces the branch counts and
>reorders the branches based on which is more likely. This works with
>the hardware branch predictor, because in most processors forward jumps
>are predicted not taken (or the other way around, I can’t remember but
>it’s in the Intel manual).
>
>You ask if the hardware would predict this correctly anyway. Well the
>prediction cache is of course of limited size so it could run out. I
>would admit you may struggle to empirically prove that reordering
>branches like this makes a big difference on benchmarks. Maybe give it
>a go if you’re curious enough and tell us about the results?
>
>Chris
>
>> On 5 Jul 2016, at 13:58, Raffaello Giulietti
>><raffaello.giulietti at supsi.ch> wrote:
>>
>> Hello,
>>
>> while I think I understand the usefulness of Truffle's BranchProfile,
>>I
>> don't get what the point is with ConditionProfile.
>>
>> I mean, except when the condition profile indicates a zero count on
>> either the "then" or "else" parts, what is the real value of having
>>such
>> a profile? The only reason I can figure out is something related to
>>code
>> layout. I thought, however, that such optimizations were already
>> addressed by the hardware branch prediction mechanics. Granted, the
>> latter needs not necessarily be implemented on every CPU out there.
>>
>> Any explanation is appreciated and welcome.
>>
>> Greetings
>> Raffaello
>
More information about the graal-dev
mailing list