forked from eregon/virtual-machines-research-graph
-
Notifications
You must be signed in to change notification settings - Fork 0
/
graph.dot
168 lines (140 loc) · 8.86 KB
/
graph.dot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
digraph G {
node [shape = "box"]
# Nodes
pic [label = "Polymorphic Inline Caches (ECOOP'91)",
tooltip = "Optimizing Dynamically-Typed Object-Oriented Languages With Polymorphic Inline Caches",
URL = "http://bibliography.selflanguage.org/_static/pics.pdf"]
mpic [label = "Dispatch Chains (Multidimensional Inline Caches) (PLDI'15)",
tooltip = "Zero-Overhead Metaprogramming; Reflection and Metaobject Protocols Fast and without Compromises",
URL = "https://stefan-marr.de/downloads/pldi15-marr-et-al-zero-overhead-metaprogramming.pdf"]
om [label = "Object Representation", shape="oval"]
maps [label = "SELF & Maps (OOPSLA'89)",
tooltip = "An Efficient Implementation of SELF a Dynamically-Typed Object-Oriented Language Based on Prototypes",
URL = "http://www.selflanguage.org/_static/published/implementation.pdf"]
tosm [label = "Truffle Object Model (PPPJ'14)",
tooltip = "An Object Storage Model for the Truffle Language Implementation Framework",
URL = "https://chrisseaton.com/rubytruffle/pppj14-om/pppj14-om.pdf"]
tso [label = "Thread-Safe Object Model (OOPSLA'16)",
tooltip = "Efficient and Thread-Safe Objects for Dynamically-Typed Languages",
URL = "https://eregon.me/blog/assets/research/thread-safe-objects.pdf"]
glsp [label = "Guest-Language Safepoints (ICOOOLPS'15)",
tooltip = "Techniques and Applications for Guest-Language Safepoints",
URL = "https://eregon.me/blog/assets/research/guest-language-safepoints.pdf"]
freezing [label = "Type Freezing Maps (CGO'20)",
tooltip = "Type Freezing: Exploiting Attribute Type Monomorphism in Tracing JIT Compilers",
URL = "https://doi.org/10.1145/3368826.3377907"]
shapesAndBBV [label = "Shapes and Basic Block Versioning (ECOOP'16)",
tooltip = "Interprocedural Type Specialization of JavaScript Programs Without Type Analysis",
URL = "https://drops.dagstuhl.de/opus/volltexte/2016/6101/pdf/LIPIcs-ECOOP-2016-7.pdf"]
collections [label = "Collections Representation", shape="oval"]
ss [label = "Storage Strategies for Collections (OOPSLA'13)",
tooltip = "Storage Strategies for Collections in Dynamically Typed Languages",
URL = "https://tratt.net/laurie/research/pubs/html/bolz_diekmann_tratt__storage_strategies_for_collections_in_dynamically_typed_languages/"]
tsc [label = "Synchronizing Collections based on Reachability (OOPSLA'18)",
tooltip = "Parallelization of Dynamic Languages: Synchronizing Built-in Collections",
URL = "https://eregon.me/blog/assets/research/thread-safe-collections.pdf"]
reachability [label = "Tracking Reachability to Reduce Synchronization", shape="oval"]
domani [label = "Thread-Local Heaps and GC (ISMM'02)",
tooltip = "Thread-Local Heaps for Java",
URL = "http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.63.5846&rep=rep1&type=pdf"]
rarc [label = "Reachability for Dynamic Atomic Reference Counting (DLS'17)",
tooltip = "Dynamic Atomicity: Optimizing Swift Memory Management",
URL = "https://dl.acm.org/doi/10.1145/3133841.3133843"]
brc [label = "Biased Reference Counting (PACT'18)",
tooltip = "Biased Reference Counting: Minimizing Atomic Operations in Garbage Collection",
URL = "https://iacoma.cs.uiuc.edu/iacoma-papers/pact18.pdf"]
exe [label = "Execution Technique", shape="oval"]
interp [label = "Interpretation", shape="oval"]
compilation [label = "Compilation", shape="oval"]
stackVsReg [label = "Stack vs. Register (VEE'05)",
tooltip = "Virtual Machine Showdown: Stack Versus Registers",
URL = "https://www.usenix.org/legacy/events%2Fvee05%2Ffull_papers/p153-yunhe.pdf"]
topOfStack [label = "Top of Stack Caching (PLDI'95)",
tooltip = "Stack Caching for Interpreters",
URL = "http://www2.cs.arizona.edu/~collberg/Teaching/553/2011/Resources/ertl94sc.pdf"]
directIndirect [label = "Impact of Direct/Indirect Threading ('03)",
tooltip = "The Structure and Performance of Efficient Interpreters",
URL = "https://www.jilp.org/vol5/v5paper12.pdf"]
selfOptAst [label = "SelfOpt AST Interp. (DLS'12)",
tooltip = "Self-Optimizing AST Interpreters",
URL = "http://lafo.ssw.uni-linz.ac.at/papers/2012_DLS_SelfOptimizingASTInterpreters.pdf"]
superInstructions [label = "Super Instructions (TOPLAS'05)",
tooltip = "Optimizing Indirect Branch Prediction Accuracy in Virtual Machine Interpreters",
URL = "https://www.scss.tcd.ie/David.Gregg/papers/toplas05.pdf"]
quickening [label = "Bytecode Quickening (DLS'10)",
tooltip = "Efficient Interpretation Using Quickening",
URL = "https://publications.sba-research.org/publications/dls10.pdf"]
inlineCaching [label = "Inline Caching (POPL'84)",
tooltip = "Efficient Implementation of the Smalltalk-80 System",
URL = "http://web.cs.ucla.edu/~palsberg/course/cs232/papers/DeutschSchiffman-popl84.pdf"]
adaptiveJit [label = "Adaptive Compilation (JAVA'99)",
tooltip = "The Jalapeño Dynamic Optimizing Compiler for Java",
URL = "https://pdfs.semanticscholar.org/8738/ba4b09cac68ad1ab7d036a6d5e40a17ee2c7.pdf"]
regionBased [label = "Region-based JIT (PLDI'18)",
tooltip = "HHVM JIT: A Profile-guided, Region-based Compiler for PHP and Hack",
URL = "https://research.fb.com/wp-content/uploads/2018/04/hhvm-jit-a-profile-guided-region-based-compiler-for-php-and-hack.pdf"]
traceBased [label = "Trace-based JIT (PLDI'00)",
tooltip = "Dynamo: A Transparent Dynamic Optimization System",
URL = "https://www.complang.tuwien.ac.at/andi/bala.pdf"]
traceMonkey [label = "TraceMonkey (PLDI'09)",
tooltip = "Trace-based Just-in-time Type Specialization for Dynamic Languages",
URL = "http://dept.cs.williams.edu/~freund/cs434/gal-trace.pdf"]
basicBlockVersioning [label = "Basic Block Versioning (ECOOP'15)",
tooltip = "Simple and Effective Type Check Removal through Lazy Basic Block Versioning",
URL = "https://drops.dagstuhl.de/opus/volltexte/2015/5219/pdf/9.pdf"]
metaTracing [label = "Meta Tracing Interpreters (ICOOOLPS'09)",
tooltip = "Tracing the Meta-level: PyPy's Tracing JIT Compiler",
URL = "https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1023.9117&rep=rep1&type=pdf"]
partialEvaluation [label = "Partially Evaluating Interpreters (PLDI'17)",
tooltip = "Practical Partial Evaluation for High-performance Dynamic Language Runtimes",
URL = "https://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf"]
MTvsPE [label = "Tracing vs. Partial Evaluation (OOPSLA'15)",
tooltip = "Tracing vs. Partial Evaluation: Comparing Meta-Compilation Approaches for Self-Optimizing Interpreters",
URL = "http://stefan-marr.de/downloads/oopsla15-marr-ducasse-meta-tracing-vs-partial-evaluation.pdf"]
optDeopt [label = "Optimized Deoptimization (PPPJ'14)",
tooltip = "Speculation Without Regret: Reducing Deoptimization Meta-data in the Graal Compiler",
URL = "http://www.ssw.uni-linz.ac.at/General/Staff/GD/PPPJ-2014-duboscq-29.pdf"]
# Edges
inlineCaching -> pic [label = "+ k-size cache"]
pic -> mpic [label = "+ cache for metaprogramming, etc"]
mpic -> tso [label = "for efficient sharing"]
om -> maps [label = "+ efficient access and lower memory footprint"]
maps -> tosm [label = "+ unboxed values, read-only & type specialization"]
tosm -> tso [label = "+ thread safety"]
tosm -> shapesAndBBV [label = "+ basic block versioning"]
tosm -> freezing [label = "+ nested type freezing"]
tso -> rarc
rarc -> brc [label = "similar with bias towards a thread"]
reachability -> domani
domani -> tso
tso -> tsc [label = "tracking reachability"]
glsp -> tsc [label = "global synchronization"]
collections -> ss [label = "+ adapt representation dynamically to unboxed values"]
ss -> tsc [label = "+ thread safety"]
exe -> inlineCaching [label = "lookup caching"]
exe -> interp
interp -> directIndirect
interp -> stackVsReg
interp -> topOfStack
interp -> superInstructions
interp -> selfOptAst
interp -> quickening
quickening -> selfOptAst [label = "+ AST interpreters"]
exe -> compilation
compilation -> maps [label = "method JIT"]
compilation -> regionBased [label = "region JIT"]
compilation -> traceBased [label = "trace JIT"]
compilation -> basicBlockVersioning [label = "basic-block JIT"]
basicBlockVersioning -> shapesAndBBV [label = "type propagation"]
traceBased -> traceMonkey
maps -> adaptiveJit
traceBased -> metaTracing [label = "+ reusable JIT"]
traceMonkey -> metaTracing [label = "+ reusable JIT"]
maps -> partialEvaluation [label = "+ method-based PE"]
selfOptAst -> partialEvaluation [label = "+ compilation"]
selfOptAst -> mpic
metaTracing -> MTvsPE [label = "+ comparison"]
partialEvaluation -> MTvsPE [label = "+ comparison"]
maps -> optDeopt
optDeopt -> partialEvaluation
}