Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Experimental: add ahead-of-time compilation via weval and PBL. #883

Merged
merged 11 commits into from
Aug 2, 2024

Commits on Aug 1, 2024

  1. Experimental: add ahead-of-time compilation via weval and PBL.

    This PR pulls in my work to use "weval", the WebAssembly partial
    evaluator, to perform ahead-of-time compilation of JavaScript using the
    PBL interpreter we previously contributed to SpiderMonkey. This work has
    been merged into the BA fork of SpiderMonkey in
    bytecodealliance/gecko-dev#45,  bytecodealliance/gecko-dev#46,
    bytecodealliance/gecko-dev#47, bytecodealliance/gecko-dev#48,
    bytecodealliance/gecko-dev#51, bytecodealliance/gecko-dev#52,
    bytecodealliance/gecko-dev#53, bytecodealliance/gecko-dev#54,
    bytecodealliance/gecko-dev#55, and then integrated into StarlingMonkey
    in bytecodealliance/StarlingMonkey#91.
    
    The feature is off by default; it requires a `--enable-experimental-aot`
    flag to be passed to `js-compute-runtime-cli.js`. This requires a
    separate build of the engine Wasm module to be used when the flag is
    passed.
    
    This should still be considered experimental until it is tested more
    widely. The PBL+weval combination passes all jit-tests and jstests in
    SpiderMonkey, and all integration tests in StarlingMonkey; however, it
    has not yet been widely tested in real-world scenarios.
    
    Initial speedups we are seeing on Octane (CPU-intensive JS benchmarks)
    are in the 3x-5x range. This is roughly equivalent to the speedup that a
    native JS engine's "baseline JIT" compiler tier gets over its
    interpreter, and it uses the same basic techniques -- compiling all
    polymorphic operations (all basic JS operators) to inline-cache sites
    that dispatch to stubs depending on types. Further speedups can be
    obtained eventually by inlining stubs from warmed-up IC chains, but that
    requires warmup.
    
    Important to note is that this compilation approach is *fully
    ahead-of-time*: it requires no profiling or observation or warmup of
    user code, and compiles the JS directly to Wasm that does not do any
    further codegen/JIT at runtime. Thus, it is suitable for the per-request
    isolation model (new Wasm instance for each request, with no shared
    state).
    cfallin committed Aug 1, 2024
    Configuration menu
    Copy the full SHA
    9836c60 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    16b8c48 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    395f40c View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    aa37232 View commit details
    Browse the repository at this point in the history

Commits on Aug 2, 2024

  1. Configuration menu
    Copy the full SHA
    383b07f View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    b47ca50 View commit details
    Browse the repository at this point in the history
  3. fix CI artifact-upload

    cfallin committed Aug 2, 2024
    Configuration menu
    Copy the full SHA
    a8d5d18 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    d1a3578 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    4147560 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    37ebf2a View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    72c274d View commit details
    Browse the repository at this point in the history