RemoveNeverExecutedCode
Tom Rodriguez
tom.rodriguez at oracle.com
Fri Aug 22 00:11:50 UTC 2014
On Aug 21, 2014, at 4:39 PM, Deneau, Tom <tom.deneau at amd.com> wrote:
> I am trying to benchmark an HSAIL kernel that is implementing the following lambda
> n -> {
> if (a1[n] != a2[n]) {
> isEqual = false;
> }
>
> where a1 and a2 are arrays of doubles. So it is basically doing an Arrays.equals.
>
> I set up the test to have 2,000,000 elements in the arrays and one of them does not match.
> Before I compile for HSAIL, I enable some profiling by running the above lambda on the cpu in non-parallel mode (IntStream.range().forEach()) so the lambda gets executed 2000000 times (and takes the false branch once).
>
> But even though one of the elements does not match, when I compile thru graal with the default -G:+RemoveNeverExecutedCode, I see that the isEqual = false path has been considered "not executed" and has been removed.
>
> Is taking a branch once out of 2,000,000 times considered "not executed"?
> Or is there some other flaw here?
Remember this means never executed according to the profile, so if it doesn’t show up in the profile then it didn’t happen. Did the profile include the taken branch?
tom
>
> Of course I can work around this in this case by forcing -G:-RemoveNeverExecutedCode but I'd like to understand this.
> This is running in -server mode.
>
> -- Tom
>
More information about the graal-dev
mailing list