Finish the slides for episode 15
This commit is contained in:
parent
fd668bbb34
commit
8c85dd4bbe
|
@ -583,7 +583,8 @@ I didn't show it in action
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
- LLVM provides a =SourceMgr= class that we're not using it
|
- LLVM provides a =SourceMgr= class that we're not using it
|
||||||
* Episode 14 - JIT Basics
|
* DONE Episode 14 - JIT Basics
|
||||||
|
CLOSED: [2022-01-05 Wed 17:37]
|
||||||
** Updates:
|
** Updates:
|
||||||
- Lost my data :_(
|
- Lost my data :_(
|
||||||
- Fixed some compatibility issues
|
- Fixed some compatibility issues
|
||||||
|
@ -714,3 +715,93 @@ I didn't show it in action
|
||||||
+ LLJIT (Based on ORCv2)
|
+ LLJIT (Based on ORCv2)
|
||||||
+ LazyLLJIT (Based on LLJIT)
|
+ LazyLLJIT (Based on LLJIT)
|
||||||
- Use LLVM's ORCv2 directly to create an engine
|
- Use LLVM's ORCv2 directly to create an engine
|
||||||
|
* Episode 15 - LLVM ORC JIT
|
||||||
|
** Uptades:
|
||||||
|
- Created a bare min JIT that:
|
||||||
|
- Eagrly compiles namespaces
|
||||||
|
- Reload namespacs
|
||||||
|
- I guess this the time to start the Serene's Spec
|
||||||
|
|
||||||
|
** What is ORCv2?
|
||||||
|
- On request compiler
|
||||||
|
- Replaces MCJIT
|
||||||
|
- ORCv2 docs and examples
|
||||||
|
- Kaleidoscope tutorial (not complete)
|
||||||
|
|
||||||
|
Before We can move to Serene's code we need to understand ORC first
|
||||||
|
|
||||||
|
** Terminology
|
||||||
|
*** Execution Session
|
||||||
|
A running JIT program. It contains the JITDylibs, error reporting mechanisms, and dispatches
|
||||||
|
the materializers.
|
||||||
|
|
||||||
|
*** JITAddress
|
||||||
|
It's just an address of a JITed code
|
||||||
|
|
||||||
|
*** JITDylib
|
||||||
|
Represents a JIT'd dynamic library.
|
||||||
|
|
||||||
|
This class aims to mimic the behavior of a shared object, but without requiring
|
||||||
|
the contained program representations to be compiled up-front. The JITDylib's
|
||||||
|
content is defined by adding MaterializationUnits, and contained MaterializationUnits
|
||||||
|
will typically rely on the JITDylib's links-against order to resolve external references.
|
||||||
|
|
||||||
|
JITDylibs cannot be moved or copied. Their address is stable, and useful as
|
||||||
|
a key in some JIT data structures.
|
||||||
|
|
||||||
|
*** MaterializationUnit
|
||||||
|
A =MaterializationUnit= represents a set of symbol definitions that can
|
||||||
|
be materialized as a group, or individually discarded (when
|
||||||
|
overriding definitions are encountered).
|
||||||
|
|
||||||
|
=MaterializationUnits= are used when providing lazy definitions of symbols to
|
||||||
|
JITDylibs. The JITDylib will call materialize when the address of a symbol
|
||||||
|
is requested via the lookup method. The =JITDylib= will call discard if a
|
||||||
|
stronger definition is added or already present.
|
||||||
|
|
||||||
|
MaterializationUnit stores in JITDylibs.
|
||||||
|
|
||||||
|
*** MaterializationResponsibility
|
||||||
|
Represents and tracks responsibility for materialization and mediates interactions between
|
||||||
|
=MaterializationUnits= and =JITDylibs=. It provides a way for Dylib to find out about the outcome
|
||||||
|
of the materialization.
|
||||||
|
|
||||||
|
*** Memory Manager
|
||||||
|
A class that manages how JIT engine should use memory, like allocations and deallocations.
|
||||||
|
=SectionMemoryManager= is a simple memory manager that is provided by ORC.
|
||||||
|
|
||||||
|
*** Layers
|
||||||
|
ORC based JIT engines are constructed from several layers. Each layer has a specific responsiblity
|
||||||
|
and passes the result of its operation to the next layer. E.g Compile Layer, Link layer and ....
|
||||||
|
|
||||||
|
*** Resource Tracker
|
||||||
|
The API to remove or transfer the ownership of JIT resources. Usually, a resource is a module.
|
||||||
|
|
||||||
|
*** ThreadSafeModule
|
||||||
|
A thread safe container for the LLVM module.
|
||||||
|
|
||||||
|
** ORC highlevel API
|
||||||
|
- ORC provides a Layer based design to that let us create our own JIT engine.
|
||||||
|
- It comes with two ready to use engines:
|
||||||
|
We will look at their implementaion later
|
||||||
|
+ LLJIT
|
||||||
|
+ LLLazyJIT
|
||||||
|
|
||||||
|
** Two major solutions to build a JIT
|
||||||
|
- Wrap LLJIT or LLLazyJIT
|
||||||
|
- Create your own JIT engine and the wrapper
|
||||||
|
|
||||||
|
** Resources
|
||||||
|
*** Docs
|
||||||
|
- https://www.llvm.org/docs/ORCv2.html
|
||||||
|
|
||||||
|
*** Examples
|
||||||
|
- https://github.com/llvm/llvm-project/tree/main/llvm/examples/HowToUseLLJIT
|
||||||
|
- https://github.com/llvm/llvm-project/tree/main/llvm/examples/OrcV2Examples/LLJITDumpObjects
|
||||||
|
- https://github.com/llvm/llvm-project/tree/main/llvm/examples/OrcV2Examples/LLJITWithInitializers
|
||||||
|
- https://github.com/llvm/llvm-project/tree/main/llvm/examples/OrcV2Examples/LLJITWithLazyReexports
|
||||||
|
|
||||||
|
*** Talks
|
||||||
|
- [[https://www.youtube.com/watch?v=i-inxFudrgI][ORCv2 -- LLVM JIT APIs Deep Dive]]
|
||||||
|
- [[https://www.youtube.com/watch?v=MOQG5vkh9J8][Updating ORC JIT for Concurrency]]
|
||||||
|
- [[https://www.youtube.com/watch?v=hILdR8XRvdQ][ORC -- LLVM's Next Generation of JIT API]]
|
||||||
|
|
Loading…
Reference in New Issue