v8/test/mjsunit/wasm/wasm-dynamic-tiering.js
Arnaud Robin 6ad8193be2 [wasm] Add priorities for function compilation
In order to improve our tiering strategy, it is a good idea to start
by tiering up functions that will be used the most, as this is done in
most JavaScript engines.

To decide which function requires tiering, we use as a basic strategy
to define its compilation priority to 'func_size * number_of_calls',
this roughly approximates the time we spend in the function.

To handle prioritization, it seemed that using  a concurrent
priority queue similar to BigUnits was causing concurrencies issues.
I then decided to use different priority queues for each worker thread.

R=clemensb@chromium.org
CC=thibaudm@chromium.org

Bug: v8:10728
Change-Id: I6f314468549000b2a9b51d3d470f04a0cb997879
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2367859
Commit-Queue: Arnaud Robin <arobin@google.com>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69585}
2020-08-27 13:42:55 +00:00

39 lines
1.0 KiB
JavaScript

// Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax --wasm-dynamic-tiering --liftoff
// Flags: --no-wasm-tier-up --no-stress-opt
load('test/mjsunit/wasm/wasm-module-builder.js');
const num_iterations = 4;
const num_functions = 2;
const builder = new WasmModuleBuilder();
for (let i = 0; i < num_functions; ++i) {
let kFunction = builder.addFunction('f' + i, kSig_i_v)
.addBody(wasmI32Const(i))
.exportAs('f' + i)
}
let instance = builder.instantiate();
for (let i = 0; i < num_iterations - 1; ++i) {
instance.exports.f0();
instance.exports.f1();
}
assertTrue(%IsLiftoffFunction(instance.exports.f0));
assertTrue(%IsLiftoffFunction(instance.exports.f1));
instance.exports.f1();
// Busy waiting until the function is tiered up.
while (true) {
if (!%IsLiftoffFunction(instance.exports.f1)) {
break;
}
}
assertTrue(%IsLiftoffFunction(instance.exports.f0));