Hi,

It seems my previous reply to Emanuel didn't send... Basically, I have 
enabled wasm unrolling in LLVM to help mitigate this already, and I have 
modified the TS unroller to help improve compile time, and performance, so 
I'd like to avoid increasing code size.

With respect to figuring out whether a loop iteration takes a long time, 
what is the upper bound for interrupt latency? If we have an inner loop, 
without calls, I would assume we could have a reasonable number of 
instructions and iterations before that latency would be adversely affected?

The runtime patching certainly sounds interesting, if more complicated that 
a loop transform. I had no idea what you were talking about though :) but 
Pierre has filled me in. I was wondering if patching would be completely 
necessary, could we not just always have a probing load in the loop?

Cheers,
Sam

On Friday, June 13, 2025 at 8:25:30 AM UTC+1 dmerc...@google.com wrote:

> Hi Sam,
>
> Just so that everybody is on the same page: these stack checks are really 
> interrupt checks rather than stack-overflow checks or something like that.
>
> And yea, performing them on every loop iteration is a bit of a waste of 
> time, but we kinda need them in every loop where we can't prove that the 
> loop won't run forever (or even: where we can't prove that the loop won't 
> run for a long time). There is already a mechanism in place in Turboshaft 
> to try to estimate the number of iterations of specific loops, and then 
> remove stack checks based on this, cf LoopStackCheckElisionReducer, whose 
> analysis is done by LoopUnrollingAnalyzer in the LoopUnrollingPhase. 
> However, as I write this, I'm noticing that the Wasm pipeline doesn't use 
> the LoopStackCheckElisionReducer outside of loop unrolling (and loop 
> unrolling only runs if there is at least one small(ish) inner loop). So, it 
> would make sense to put a LoopStackCheckElisionReducer in the next phase 
> after LoopUnrollingPhase: WasmGCOptimizePhase... except that this phase 
> only runs for WasmGC. Maybe we can tweak a little bit the 
> LoopStackCheckElisionReducer to put it in both WasmGCOptimizePhase 
> and WasmLoweringPhase (the next phase, which runs unconditionally), but it 
> would be a nop in WasmLoweringPhase if it has already ran 
> in LoopStackCheckElisionReducer.
> Additional limitation of 
> LoopUnrollingAnalyzer+LoopStackCheckElisionReducer: the 
> LoopUnrollingAnalyzer only detects the number of iterations of very 
> specific loops (something like "for (i = <constant>; i <comparison 
> operation> <constant>; i += <constant>)"). But it's perfectly reasonable to 
> improve the pattern matching there to support more loops.
>
> Another way to improve these interrupt checks that we've talked about 
> before would be to remove all loop stack checks, and patch the code 
> in-place when we have an interrupt to trigger. This way, we wouldn't have 
> to keep repeating those stack checks that most of the time don't do 
> anything. Probably not super trivial to implement, but doable I would 
> think. If you want to go down that route, I suggest writing a design doc 
> and gathering approvals from V8 folks, since some might have concerns 
> (regarding security for instance).
>
> Cheers,
> Darius
>
> On Thu, 12 Jun 2025 at 17:02, 'Emanuel Ziegler' via v8-dev <
> v8-...@googlegroups.com> wrote:
>
>> Hi Sam,
>>
>> In principle, loop unrolling should already reduce the number of stack 
>> checks, but it could be that it's insufficient or that for whatever reason 
>> this optimization does not get applied here. Did you take a look at the 
>> generated code?
>>
>> Cheers,
>>     Emanuel
>>
>> On Thu, Jun 12, 2025 at 4:44 PM Sam Parker-Haynes <sam.p...@arm.com> 
>> wrote:
>>
>>> Hi!
>>>
>>> While running some AI code, the loop header WasmStackCheck was appearing 
>>> quite heavily in the profile. Disabling the checks results in ~1.5% 
>>> speedup. So, is it necessary to execute these for every iteration? Or could 
>>> we wrap inner loops, devoid of a stack check, in a new loop with one so 
>>> that these checks are executed for a fraction of what they are now?
>>>
>>> Cheers,
>>> Sam
>>>
>>>
>>>
>>> -- 
>>> -- 
>>> v8-dev mailing list
>>> v8-...@googlegroups.com
>>> http://groups.google.com/group/v8-dev
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "v8-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to v8-dev+un...@googlegroups.com.
>>> To view this discussion visit 
>>> https://groups.google.com/d/msgid/v8-dev/b4a77d25-21f9-4a0d-a467-8cbe48275bfbn%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/v8-dev/b4a77d25-21f9-4a0d-a467-8cbe48275bfbn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> -- 
>> -- 
>> v8-dev mailing list
>> v8-...@googlegroups.com
>> http://groups.google.com/group/v8-dev
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "v8-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to v8-dev+un...@googlegroups.com.
>>
> To view this discussion visit 
>> https://groups.google.com/d/msgid/v8-dev/CAPAU7RyGTVCKFUgJoTiDH546up4d8qJ4fQCr8aTKFBVtxUt%2BoQ%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/v8-dev/CAPAU7RyGTVCKFUgJoTiDH546up4d8qJ4fQCr8aTKFBVtxUt%2BoQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> Darius Mercadier
>
> Software Engineer
>
> dmerc...@google.com
>
> Google Germany GmbH
>
> Erika-Mann-Straße 33
>
> 80636 München
>
> Geschäftsführer: Paul Manicle, Liana Sebastian
>
> Registergericht und -nummer: Hamburg, HRB 86891
>
> Sitz der Gesellschaft: Hamburg
>
> Diese E-Mail ist vertraulich. Falls Sie diese fälschlicherweise erhalten 
> haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, 
> löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, 
> dass die E-Mail an die falsche Person gesendet wurde. 
>
>      
>
> This e-mail is confidential. If you received this communication by 
> mistake, please don't forward it to anyone else, please erase all copies 
> and attachments, and please let me know that it has gone to the wrong 
> person.
>

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/v8-dev/9c4240e3-b48f-43e1-aeb2-9953da8b9a64n%40googlegroups.com.

Reply via email to