TLB hit 💥

A podcast about systems & compilers

🐦 @TLBhit

🎙 RSS

🍎 Apple podcast

Episode 4: t-r-a-c-/e̅‾\-o-m-p-i-l-e

Prologue [00:00]

Tracing a Brief History of Tracing [01:10]

Dynamic Binary Translators and Binary Instrumentation [03:10]

Dynamic Compilation vs Static Approach [04:25]

Workloads and Phasic Behavior [05:20]

Quick vs Confident [06:15]

Pop-Up Ideas In Specialization/Speculation [07:00]

Implementation Angles [08:50]

Tracing Through Some Terms [11:40]

Concept: Method Inlining [11:55]

Concept: Tail Duplication [11:55]

[ed: Perhaps in summary, you can think about tail deuplication as de-aliasing control possibilities (via duplication) so you could potentially specialize for their differences aggressively along a particular linear path]

Region Formation / Spectrum of "Avoiding Strict Linearity" [13:30]

When Do We Trigger Compilation? [16:35]

How Do We Gather Information/Observations? [18:35]

[Ed: we didn't talk about a) monomorphism which is a nice property that types observed one time in dynamic language code are often the one type you'll ever observe, or b) the related idea of "free" monitoring mode side buffer capabilities that come e.g. with last branch record tables and similar in CPU architectures.]

Call Threaded Interpreters [20:30]

How Aggressively To Specialize Traces For Observations [21:15]

Splat JIT'ing [22:50]

Tiers and JIT speed [23:20]

Chopping Traces [24:00]

Some Spooky Concepts [24:40]

Those Who Do Not Remember History Are Doomed To... Uh... Something [26:50]

Long Tail Corpus / Flat Profiles [28:10]

Popping Back to Episode 0: On Stacks [30:00]

Notion of "Bolting the Tracer On" [31:42]

High Level Trade-offs Involved in Trace Compilation [32:15]

Sample Tracing JITs [34:15]

Meta-Circular Interpreters & Cool Trace JITs [36:50]

Epilogue [37:20]