Great talk!! I have a sense that the performance issue you saw for call-threading was “branch target” related (similar to what was noted for the laptop case) which was mitigated in the token-threading approach by the multiple branches that could be separately learned. Perhaps unrolling the loop in the call-threading approach could have helped. I also wonder if the compiler flag “-march=native” could have generated better (and different) switch-statement code for the different platforms
It doesn't help in the case where you don't tail call the "slow part", the compiler doesn't extract that in a separate function for you. If you already applied the optimization, it can further help, yes.
Great talk!! I have a sense that the performance issue you saw for call-threading was “branch target” related (similar to what was noted for the laptop case) which was mitigated in the token-threading approach by the multiple branches that could be separately learned. Perhaps unrolling the loop in the call-threading approach could have helped. I also wonder if the compiler flag “-march=native” could have generated better (and different) switch-statement code for the different platforms
Great talk, but please talk at a slower pace, you are almost impossible to understand at times.
20:15 I suspect the goto statement in slide 43 should only have the label location, without “argument passing” in parentheses.
Yes, it should!
34:20 I wonder if the [[unlikely]] attribute could have made a difference here
It doesn't help in the case where you don't tail call the "slow part", the compiler doesn't extract that in a separate function for you. If you already applied the optimization, it can further help, yes.