Finalize EP14
This commit is contained in:
parent
4c07544141
commit
aca81f8d61
3
dev.org
3
dev.org
|
@ -103,7 +103,8 @@ on ADF
|
|||
- [[https://blog.yossarian.net/2021/07/19/LLVM-internals-part-1-bitcode-format][LLVM Internals]]
|
||||
*** TableGen
|
||||
- [[https://llvm.org/docs/TableGen/BackGuide.html#creating-a-new-backend][Create a backend]]
|
||||
|
||||
** Useful courses
|
||||
- https://www.cs.cornell.edu/courses/cs6120/2020fa/lesson/
|
||||
* Considerations
|
||||
** Hashmaps
|
||||
*** DOS attack
|
||||
|
|
134
docs/videos.org
134
docs/videos.org
|
@ -562,7 +562,8 @@ and tries to =resolve= *undefined* symbols
|
|||
** Let's look at some code
|
||||
** Resources:
|
||||
- [[https://lwn.net/Articles/276782/][20 part linker essay]]
|
||||
* Episode 13 - Source Managers
|
||||
* DONE Episode 13 - Source Managers
|
||||
CLOSED: [2021-12-18 Sat 11:17]
|
||||
** FAQ:
|
||||
- What tools are you using?
|
||||
|
||||
|
@ -582,3 +583,134 @@ I didn't show it in action
|
|||
- ...
|
||||
|
||||
- LLVM provides a =SourceMgr= class that we're not using it
|
||||
* Episode 14 - JIT Basics
|
||||
** Updates:
|
||||
- Lost my data :_(
|
||||
- Fixed some compatibility issues
|
||||
- New video series on *How to build an editor with Emacs Lisp*
|
||||
|
||||
** What is Just In Time Compilation?
|
||||
- Compiling at "runtime" (air quote)
|
||||
Or it might be better to say, "on demand compilation"
|
||||
- Usually in interpreters and Runtimes
|
||||
|
||||
#+NAME: ep-14-jit-1
|
||||
#+BEGIN_SRC graphviz-dot :file /tmp/jit.svg :cmdline -Kdot -Tsvg
|
||||
digraph {
|
||||
graph [bgcolor=transparent]
|
||||
node [color=gray80 shape="box"]
|
||||
edge [color=gray80]
|
||||
rankdir = "LR"
|
||||
|
||||
a[label="Some kind of input code"]
|
||||
b[label="JIT"]
|
||||
c[label="Some sort of target code"]
|
||||
d[label="Execute the result"]
|
||||
a -> b -> c -> d
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS: ep-14-jit-1
|
||||
[[file:/tmp/jit.svg]]
|
||||
|
||||
|
||||
|
||||
#+NAME: ep-14-jit-2
|
||||
#+BEGIN_SRC graphviz-dot :file /tmp/jit-2.svg :cmdline -Kdot -Tsvg
|
||||
|
||||
digraph G {
|
||||
graph [bgcolor=transparent]
|
||||
node [color=gray80 shape="box"]
|
||||
edge [color=gray80]
|
||||
rankdir = "LR"
|
||||
|
||||
a[label="Source code"]
|
||||
b[label="Parser"]
|
||||
c[label="Semantic Analyzer"]
|
||||
d[label="IR Generator"]
|
||||
e[label="Pass Manager"]
|
||||
f[label="Object Layer"]
|
||||
g[label="Native Code"]
|
||||
z[label="Preload Core libs"]
|
||||
a -> b
|
||||
b -> c {label="AST"}
|
||||
c -> d
|
||||
z -> f
|
||||
subgraph cluster0 {
|
||||
color=lightgrey;
|
||||
d -> e -> f
|
||||
label = "JIT Engine";
|
||||
}
|
||||
f -> g
|
||||
g -> Store
|
||||
g -> Execute
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS: ep-14-jit-2
|
||||
[[file:/tmp/jit-2.svg]]
|
||||
|
||||
|
||||
- Trade off
|
||||
Compilation speed vs Execution speed
|
||||
*** JIT vs Typical interpreters
|
||||
|
||||
** Why to use JIT?
|
||||
- Make the interpreter to run "faster" (air quote again)
|
||||
- Speed up the compilation
|
||||
Avoid generating the target code and generate some byte-code instead
|
||||
and then use a JIT in runtime to execute the byte-code.
|
||||
- Use runtime data to find optimization opportunities.
|
||||
- Support more archs
|
||||
- And many other reasons
|
||||
** How we're going to use a JIT?
|
||||
- We need a JIT engine to implement Lisp Macros
|
||||
- Compile time vs Runtime
|
||||
+ Abstraction
|
||||
- A JIT engine to just compile Serene code
|
||||
- Our compiler will be a fancy JIT engine
|
||||
|
||||
#+NAME: ep-14-jit-3
|
||||
#+BEGIN_SRC graphviz-dot :file /tmp/jit-3.svg :cmdline -Kdot -Tsvg
|
||||
digraph {
|
||||
graph [bgcolor=transparent]
|
||||
node [color=gray80 shape="box"]
|
||||
edge [color=gray80]
|
||||
rankdir = "LR"
|
||||
|
||||
a[label="Serene AST"]
|
||||
b[label="For every node"]
|
||||
c[label="is it a macro call?" shapp="diamond"]
|
||||
d[label="Add it to JIT"]
|
||||
e[label="Expand it (call it)"]
|
||||
f[label="Generate target code"]
|
||||
a -> b
|
||||
|
||||
|
||||
subgraph cluster0 {
|
||||
color=lightgrey;
|
||||
b -> c
|
||||
c -> d [label="NO"]
|
||||
c -> e [label="YES"]
|
||||
e -> b
|
||||
d -> f
|
||||
label = "JIT Engine";
|
||||
}
|
||||
|
||||
f -> Store
|
||||
f -> Execute
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS: ep-14-jit-3
|
||||
[[file:/tmp/jit-3.svg]]
|
||||
|
||||
|
||||
** LLVM/MLIR and JIT
|
||||
- 3 different approaches
|
||||
- MLIR's JIT
|
||||
- LLVM JITs
|
||||
+ MCJIT (Deprecated)
|
||||
+ LLJIT (Based on ORCv2)
|
||||
+ LazyLLJIT (Based on LLJIT)
|
||||
- Use LLVM's ORCv2 directly to create an engine
|
||||
|
|
Loading…
Reference in New Issue