Truffle Splitting Heuristics cause compilation to never stabilize

Stefan Marr java at stefan-marr.de
Tue Nov 14 16:28:30 UTC 2017


Hi:

Any updates on this issue?
It seems to come back biting us. Now it seems the culprit in some fork/join workloads.

Thanks
Stefan

> On 26 Jul 2017, at 21:49, Thomas Wuerthinger <thomas.wuerthinger at oracle.com> wrote:
> 
> Thanks Stefan. This is a great catch! We need to fix the splitting heuristics to cover indirect recursion. - thomas
> 
>> On 26 Jul 2017, at 17:57, Stefan Marr <java at stefan-marr.de> wrote:
>> 
>> Hi:
>> 
>> I have been running into a stabilizing issue with a small benchmark from the Newspeak benchmark suite.
>> 
>> The issue exists however also in other languages.
>> Let’s take Ruby as example, which might be more legible:
>> 
>> def fib(x)
>> -> n {
>>   if n < 2
>>     1
>>   else
>>     fib(n-1) + fib(n-2)
>>   end
>> }.call(x)
>> end
>> 
>> loop { fib(25) }
>> 
>> The main problem here is that we have an indirectly recursive function, which itself has only a single call.
>> 
>> This means, DefaultTruffleSplittingStrategy will see fib and say hey isMaxSingleCall==true, let’s split it.
>> In the block itself, fib is then split again and again, because it is not directly recursive, but one indirection removed. So, the recursion heuristic doesn’t trigger.
>> 
>> In my Newspeak (SOMns), the problem is further exaggerated because when a method gets split, I also split its embedded blocks to allow type specialization of local variables. This isn’t the case in TruffleRuby however.
>> 
>> Is there anything that could be done to make DefaultTruffleSplittingStrategy a little smarter about this?

-- 
Stefan Marr
School of Computing, University of Kent
http://stefan-marr.de/research/




More information about the graal-dev mailing list