Hi folks,

For the past few days I have been trying an experiment of caching type
information across executions of a benchmark. The main goal of this
experiment is to see whether caching type information and feeding it to the
engine in subsequent runs provides any sort of speedup. Initial results
show that it is indeed possible to achieve speedup for few of the
benchmarks.

During the first run, I profile and record the type information that is
added to the type set of a program point using the TypeScript::Monitor
call. During the subsequent runs, I feed this information ahead of time in
the BaselineCompiler::compile method. Currently, I am concentrating solely
on primitive types.

Initial results showed slowdowns for almost all of the benchmarks. I
realized that most of the types that are tracked are useless unless the
function becomes hot and is compiled by Ion. Therefore, I streamlined the
profiling to collect information only for such functions. Later, I realized
that I should concentrate on the functions that bail out of Ion because of
TypeBarrierV violation.

Here are the results that I have for few of the Octane benchmarks. I ran
the benchmarks 20 times and averaged the scores, ignoring the first two
scores. I concentrate on benchmarks that have functions that cause
Bailout_TypeBarrierV kind of bailout.

   Benchmark Oracle Score Baseline Score Score Speedup  run-box2d.js
49664.9047619 38278.4761905 1.2974629532  run-crypto.js 16216.3333333
16803.8571429 0.965036372  run-earley-boyer.js 22468 21787.6666667
1.0312256169  run-navier-stokes.js 24852.1904762 25664.6190476 0.9683444134
run-typescript.js 18006.7142857 16610.0952381 1.084082543  run-gbemu.js
36623.952381 31222.2857143 1.1730067656  run-pdfjs.js 14821.5714286
12264.0952381 1.2085336212  Average

*1.1039560408*

As you can see the speedup numbers are not that great. But I see some
promise here. I would like some feedback on how to handle other kind of
Bailouts by caching profile information. Caching and encoding typeobjects
is something that I am working on right now.

Intuitively, feeding the type information should remove the bailouts in the
subsequent runs. But I see a few of them still persisting. Any idea why
this might be happening?

Thanks,
Madhukar N Kedlaya
Graduate Student,
University of California, Santa Barbara
http://cs.ucsb.edu/~mkedlaya
_______________________________________________
dev-tech-js-engine-internals mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals

Reply via email to