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

