What should every (Dotty) developer know about hardware
a new compiler for a Scala-like language
developed at LAMP EPFL
is currently not ready for production use
some of the new technologies explored in this project will find their way into future versions of Scala
doing PhD at EPFL
previously worked on ScalaBlitz
was first to join Martin in working on Dotty in 2014
together with Martin build foundations of Dotty
started Dotty Linker & optimizer project
How does knowing this help us?
Every phase traverses a tree independently
Reading cold data
Creating new subtrees
That live long and are promoted to OldGen of GC
Phases share tree traversal
Trees you are accessing are hot
Trees die fast and do not get promoted to OldGen of GC
GC promotion to OldGen
Memory accesses(cache misses)
Other approaches to combine with?
See Iulian's talk!
tracing & sampling profilers for initial exploration
Linux perf - for measuring entire applications
- for microbenchmarks
getting performance is hard, needs a lot of exploration;
loosing performance is easy, seemingly small changes can kill it;
tracking performance is crucial.
Q & A
What Should every programmer know about memory
Modern Microprocessors: A 90-Minute Guide
Why (Most) Sampling Java Profilers Are Fucking Terrible
Producing wrong data without doing anything obviously wrong!