mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
2 lines
46 KiB
Plaintext
2 lines
46 KiB
Plaintext
<div class="pd w0 h0"><div id="pfd" class="pf" data-page-no="d"><div class="pc pcd"><img class="bi x2f ye0 w27 h1e" alt="" src="data:image/png;base64,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"/><div class="c x2f y253 wb h24"><div class="t m0 x40 he y17e ff18 fsf fc0 sc0 ls0 ws0">!"#<span class="_ _24"> </span>$!"#<span class="_ _2d"> </span>%!"#<span class="_ _10"> </span>&!"#<span class="_ _10"> </span>'!"#<span class="_ _4a"> </span>(!!"#</div></div><div class="c x30 y6c w28 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">)*+,-./#0$1$23#</div></div><div class="c x52 y1c0 wd h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">)*+45678#0$1923#</div></div><div class="c x0 y255 w19 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">)*+6:;<6:,/#0(1$23#</div></div><div class="c x34 y29d w29 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">:,,/==+.>?:6;+<6//=#0!1923#</div></div><div class="c xb9 y1be w2a h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">:,,/==+@:??A-,8#0$1$23#</div></div><div class="c x9c y256 w11 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">:,,/==+?.5*;#0%1$23#</div></div><div class="c x9c yc w12 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">:,,/==+?=>/B/#0)1!23#</div></div><div class="c x6d y1eb w2b h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">.><57=+).><+.><=+>?+.;</#0$C1C23#</div></div><div class="c x37 y29e w14 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">.><57=+.><=+>?+.;</#0'1D23#</div></div><div class="c x9b y110 w1c h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">.><57=+.><E>=/+:?*#0$C1$23#</div></div><div class="c x18 y9 w2c h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">.><57=+?=>/B/+.><=#0$1D23#</div></div><div class="c xba y259 w2d h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">,5?<65FG5E+6<span class="_ _2"></span>/,-6=>B/#0(1!23#</div></div><div class="c x52 y29f w18 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">,6;7<5+:/=#0(1&23#</div></div><div class="c x0 y2a0 w19 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">,6;7<5+4*C#0$1)23#</div></div><div class="c xbb yd7 w1b h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">,6;7<5+=8:(#0C1923#</div></div><div class="c x18 y152 w16 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">*:</+@564:<<span class="_ _2"></span>+<5H/#0(1(23#</div></div><div class="c x37 y2a1 w14 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">*:</+@564:<<span class="_ _2"></span>+27:6.#0(1!23#</div></div><div class="c xbb yd5 w2e h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">4:<8+,56*>,#0%1923#</div></div><div class="c x37 y2a2 w14 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">4:<8+7:6I:F+=-4=#0C1923#</div></div><div class="c x9b y2a3 w20 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">4:<8+=7/,<6:F+?564#0D1(23#</div></div><div class="c x0 y2a4 we h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">6/J/27+*?:#0%1$23#</div></div><div class="c x9c y2a5 w2f h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">=<6>?J+.:=/&%#0$1C23#</div></div><div class="c x0 y2a6 w30 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">=<6>?J+@:=<:#0(1C23#</div></div><div class="c xbc y2a7 w31 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">=<6>?J+<:J,F5-*#0(1(23#</div></div><div class="c x34 y2a8 wf h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">=<6>?J+-?7:,A+,5*/#0(1$23#</div></div><div class="c x66 y2a9 w20 h6"><div class="t m0 xac h16 y254 ff18 fs7 fc0 sc0 ls0 ws0">=<6>?J+B:F>*:</+>?7-<#0(1923#</div></div><div class="c x30 y2aa w21 h5"><div class="t m0 xb5 he y2ab ff18 fsf fc0 sc0 ls0 ws0">K?</676/<#</div></div><div class="c xbd y2aa w25 h5"><div class="t m0 xb5 he y2ab ff18 fsf fc0 sc0 ls0 ws0">L5?><56#</div></div><div class="c xbe y2aa w32 h5"><div class="t m0 xb5 he y2ab ff18 fsf fc0 sc0 ls0 ws0">M/,56*#</div></div><div class="c xbf y2aa w25 h5"><div class="t m0 xb5 he y2ab ff18 fsf fc0 sc0 ls0 ws0">N547>F/#</div></div><div class="c xf y2aa w33 h5"><div class="t m0 xb5 he y2ab ff18 fsf fc0 sc0 ls0 ws0">N:FF#O<span class="_ _2"></span>6:,/#</div></div><div class="c xc0 y2aa w34 h5"><div class="t m0 xb5 he y2ab ff18 fsf fc0 sc0 ls0 ws0">M-?#O<span class="_ _2"></span>6:,/#</div></div><div class="t m0 x2f h5 ye1 ff1 fs3 fc0 sc0 ls0 ws0">Figure<span class="_ _5"> </span>12.<span class="_ _1"> </span>Fraction<span class="_ _3"> </span>of<span class="_ _3"> </span>time<span class="_ _5"> </span>spent<span class="_ _3"> </span>on<span class="_ _3"> </span>major<span class="_ _5"> </span>VM<span class="_ _3"> </span>activities.<span class="_ _5"> </span><span class="ff2">The</span></div><div class="t m0 x2f h5 ye2 ff2 fs3 fc0 sc0 ls0 ws0">speedup<span class="_ _6"> </span>vs.<span class="_ _6"> </span>interpreter<span class="_ _3"> </span>is<span class="_ _6"> </span>shown<span class="_ _3"> </span>in<span class="_ _6"> </span>parentheses<span class="_ _6"> </span>next<span class="_ _3"> </span>to<span class="_ _6"> </span>each<span class="_ _6"> </span>test.</div><div class="t m0 x2f h5 ye3 ff2 fs3 fc0 sc0 ls0 ws0">Most<span class="_ _3"> </span>programs<span class="_ _5"> </span>where<span class="_ _3"> </span>the<span class="_ _5"> </span>VM<span class="_ _3"> </span>spends<span class="_ _5"> </span>the<span class="_ _3"> </span>majority<span class="_ _5"> </span>of<span class="_ _3"> </span>its<span class="_ _5"> </span>time<span class="_ _3"> </span>run-</div><div class="t m0 x2f h5 ye4 ff2 fs3 fc0 sc0 ls0 ws0">ning<span class="_ _5"> </span>native<span class="_ _5"> </span>code<span class="_ _3"> </span>ha<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _5"> </span>a<span class="_ _3"> </span>good<span class="_ _5"> </span>speedup.<span class="_ _3"> </span>Recording<span class="_ _5"> </span>and<span class="_ _5"> </span>compilation</div><div class="t m0 x2f h5 ye5 ff2 fs3 fc0 sc0 ls0 ws0">costs<span class="_ _3"> </span>can<span class="_ _5"> </span>be<span class="_ _3"> </span>substantial;<span class="_ _5"> </span>speeding<span class="_ _3"> </span>up<span class="_ _3"> </span>those<span class="_ _5"> </span>parts<span class="_ _3"> </span>of<span class="_ _5"> </span>the<span class="_ _3"> </span>implemen-</div><div class="t m0 x2f h5 ye6 ff2 fs3 fc0 sc0 ls0 ws0">tation<span class="_ _5"> </span>would<span class="_ _5"> </span>improve<span class="_ _5"> </span>SunSpider<span class="_ _5"> </span>performance.</div><div class="t m0 x2f h5 y11f ff2 fs3 fc0 sc0 ls0 ws0">inner<span class="_ _5"> </span>loops<span class="_ _3"> </span>become<span class="_ _5"> </span>hot<span class="_ _3"> </span>first),<span class="_ _5"> </span>leading<span class="_ _5"> </span>to<span class="_ _3"> </span>much<span class="_ _5"> </span>greater<span class="_ _5"> </span>tail<span class="_ _3"> </span>duplica-</div><div class="t m0 x2f h5 y120 ff2 fs3 fc0 sc0 ls0 ws0">tion.</div><div class="t m0 x34 h5 y121 ff2 fs3 fc0 sc0 ls0 ws0">YETI,<span class="_ _8"> </span>from<span class="_ _8"> </span>Zaleski<span class="_ _8"> </span>et<span class="_ _d"> </span>al.<span class="_ _8"> </span>(19)<span class="_ _8"> </span>applied<span class="_ _8"> </span>Dynamo-style<span class="_ _8"> </span>tracing</div><div class="t m0 x2f h5 y122 ff2 fs3 fc0 sc0 ls0 ws0">to<span class="_ _1"> </span>Ja<span class="_ _2"></span>v<span class="_ _2"></span>a<span class="_ _d"> </span>in<span class="_ _1"> </span>order<span class="_ _d"> </span>to<span class="_ _1"> </span>achie<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _d"> </span>inlining,<span class="_ _1"> </span>indirect<span class="_ _d"> </span>jump<span class="_ _1"> </span>elimination,</div><div class="t m0 x2f h5 y123 ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _3"> </span>other<span class="_ _3"> </span>optimizations.<span class="_ _5"> </span>Their<span class="_ _3"> </span>primary<span class="_ _3"> </span>focus<span class="_ _3"> </span>w<span class="_ _2"></span>as<span class="_ _3"> </span>on<span class="_ _5"> </span>designing<span class="_ _3"> </span>an</div><div class="t m0 x2f h5 y124 ff2 fs3 fc0 sc0 ls0 ws0">interpreter<span class="_ _5"> </span>that<span class="_ _5"> </span>could<span class="_ _5"> </span>easily<span class="_ _5"> </span>be<span class="_ _5"> </span>gradually<span class="_ _5"> </span>re-engineered<span class="_ _5"> </span>as<span class="_ _5"> </span>a<span class="_ _5"> </span>tracing</div><div class="t m0 x2f h5 y125 ff2 fs3 fc0 sc0 ls0 ws0">VM.</div><div class="t m0 x34 h5 y126 ff2 fs3 fc0 sc0 ls0 ws0">Suganuma<span class="_ _7"> </span>et<span class="_ _5"> </span>al.<span class="_ _7"> </span>(18)<span class="_ _7"> </span>described<span class="_ _5"> </span>re<span class="_ _2"></span>gion-based<span class="_ _7"> </span>compilation<span class="_ _7"> </span>(RBC),</div><div class="t m0 x2f h5 y127 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _3"> </span>relativ<span class="_ _2"></span>e<span class="_ _3"> </span>of<span class="_ _3"> </span>tracing.<span class="_ _3"> </span>A<span class="_ _3"> </span>region<span class="_ _3"> </span>is<span class="_ _3"> </span>an<span class="_ _3"> </span>subprogram<span class="_ _3"> </span>worth<span class="_ _3"> </span>optimizing</div><div class="t m0 x2f h5 y128 ff2 fs3 fc0 sc0 ls0 ws0">that<span class="_ _5"> </span>can<span class="_ _5"> </span>include<span class="_ _5"> </span>subsets<span class="_ _5"> </span>of<span class="_ _5"> </span>any<span class="_ _5"> </span>number<span class="_ _5"> </span>of<span class="_ _5"> </span>methods.<span class="_ _5"> </span>Thus,<span class="_ _5"> </span>the<span class="_ _5"> </span>com-</div><div class="t m0 x2f h5 y129 ff2 fs3 fc0 sc0 ls0 ws0">piler<span class="_ _3"> </span>has<span class="_ _3"> </span>more<span class="_ _3"> </span>fle<span class="_ _2"></span>xibility<span class="_ _3"> </span>and<span class="_ _3"> </span>can<span class="_ _5"> </span>potentially<span class="_ _3"> </span>generate<span class="_ _3"> </span>better<span class="_ _3"> </span>code,</div><div class="t m0 x2f h5 y12a ff2 fs3 fc0 sc0 ls0 ws0">but<span class="_ _7"> </span>the<span class="_ _5"> </span>profiling<span class="_ _7"> </span>and<span class="_ _7"> </span>compilation<span class="_ _5"> </span>systems<span class="_ _7"> </span>are<span class="_ _5"> </span>correspondingly<span class="_ _7"> </span>more</div><div class="t m0 x2f h5 y12b ff2 fs3 fc0 sc0 ls0 ws0">complex.</div><div class="t m0 x34 h5 y12c ff1 fs3 fc0 sc0 ls0 ws0">T<span class="_ _b"></span>ype<span class="_ _1"> </span>specialization<span class="_ _1"> </span>f<span class="_ _2"></span>or<span class="_ _d"> </span>dynamic<span class="_ _1"> </span>languages.<span class="_ _1"> </span><span class="ff2">Dynamic<span class="_ _d"> </span>lan-</span></div><div class="t m0 x2f h5 y12d ff2 fs3 fc0 sc0 ls0 ws0">guage<span class="_ _3"> </span>implementors<span class="_ _3"> </span>have<span class="_ _3"> </span>long<span class="_ _3"> </span>recognized<span class="_ _3"> </span>the<span class="_ _3"> </span>importance<span class="_ _3"> </span>of<span class="_ _3"> </span>type</div><div class="t m0 x2f h5 ycc ff2 fs3 fc0 sc0 ls0 ws0">specialization<span class="_ _5"> </span>for<span class="_ _7"> </span>performance.<span class="_ _5"> </span>Most<span class="_ _5"> </span>pre<span class="_ _2"></span>vious<span class="_ _5"> </span>w<span class="_ _2"></span>ork<span class="_ _5"> </span>has<span class="_ _7"> </span>focused<span class="_ _5"> </span>on</div><div class="t m0 x2f h5 ycd ff2 fs3 fc0 sc0 ls0 ws0">methods<span class="_ _5"> </span>instead<span class="_ _5"> </span>of<span class="_ _3"> </span>traces.</div><div class="t m0 x34 h5 yce ff2 fs3 fc0 sc0 ls0 ws0">Chambers<span class="_ _6"> </span>et.<span class="_ _8"> </span>al<span class="_ _6"> </span>(9)<span class="_ _8"> </span>pioneered<span class="_ _8"> </span>the<span class="_ _6"> </span>idea<span class="_ _8"> </span>of<span class="_ _6"> </span>compiling<span class="_ _8"> </span>multiple</div><div class="t m0 x2f h5 ycf ff2 fs3 fc0 sc0 ls0 ws0">versions<span class="_ _3"> </span>of<span class="_ _3"> </span>a<span class="_ _6"> </span>procedure<span class="_ _3"> </span>specialized<span class="_ _3"> </span>for<span class="_ _3"> </span>the<span class="_ _6"> </span>input<span class="_ _3"> </span>types<span class="_ _3"> </span>in<span class="_ _6"> </span>the<span class="_ _3"> </span>lan-</div><div class="t m0 x2f h5 yd0 ff2 fs3 fc0 sc0 ls0 ws0">guage<span class="_ _8"> </span>Self.<span class="_ _8"> </span>In<span class="_ _8"> </span>one<span class="_ _8"> </span>implementation,<span class="_ _8"> </span>they<span class="_ _8"> </span>generated<span class="_ _8"> </span>a<span class="_ _8"> </span>specialized</div><div class="t m0 x2f h5 yd1 ff2 fs3 fc0 sc0 ls0 ws0">method<span class="_ _5"> </span>online<span class="_ _7"> </span>each<span class="_ _5"> </span>time<span class="_ _5"> </span>a<span class="_ _7"> </span>method<span class="_ _5"> </span>w<span class="_ _2"></span>as<span class="_ _5"> </span>called<span class="_ _7"> </span>with<span class="_ _5"> </span>ne<span class="_ _2"></span>w<span class="_ _5"> </span>input<span class="_ _7"> </span>types.</div><div class="t m0 x2f h5 yd2 ff2 fs3 fc0 sc0 ls0 ws0">In<span class="_ _6"> </span>another<span class="_ _2"></span>,<span class="_ _6"> </span>they<span class="_ _6"> </span>used<span class="_ _6"> </span>an<span class="_ _8"> </span>of<span class="_ _2"></span>fline<span class="_ _6"> </span>whole-program<span class="_ _6"> </span>static<span class="_ _8"> </span>analysis<span class="_ _6"> </span>to</div><div class="t m0 x2f h5 yd3 ff2 fs3 fc0 sc0 ls0 ws0">infer<span class="_ _3"> </span>input<span class="_ _3"> </span>types<span class="_ _3"> </span>and<span class="_ _3"> </span>constant<span class="_ _3"> </span>recei<span class="_ _2"></span>v<span class="_ _2"></span>er<span class="_ _3"> </span>types<span class="_ _3"> </span>at<span class="_ _3"> </span>call<span class="_ _3"> </span>sites.<span class="_ _3"> </span>Interest-</div><div class="t m0 x2f h5 y94 ff2 fs3 fc0 sc0 ls0 ws0">ingly<span class="_ _2"></span>,<span class="_ _5"> </span>the<span class="_ _5"> </span>two<span class="_ _5"> </span>techniques<span class="_ _5"> </span>produced<span class="_ _5"> </span>nearly<span class="_ _5"> </span>the<span class="_ _5"> </span>same<span class="_ _3"> </span>performance.</div><div class="t m0 x34 h5 y95 ff2 fs3 fc0 sc0 ls0 ws0">Salib<span class="_ _5"> </span>(17)<span class="_ _5"> </span>designed<span class="_ _7"> </span>a<span class="_ _5"> </span>type<span class="_ _5"> </span>inference<span class="_ _5"> </span>algorithm<span class="_ _7"> </span>for<span class="_ _5"> </span>Python<span class="_ _5"> </span>based</div><div class="t m0 x2f h5 y96 ff2 fs3 fc0 sc0 ls0 ws0">on<span class="_ _5"> </span>the<span class="_ _5"> </span>Cartesian<span class="_ _5"> </span>Product<span class="_ _5"> </span>Algorithm<span class="_ _5"> </span>and<span class="_ _5"> </span>used<span class="_ _5"> </span>the<span class="_ _5"> </span>results<span class="_ _5"> </span>to<span class="_ _5"> </span>special-</div><div class="t m0 x2f h5 y97 ff2 fs3 fc0 sc0 ls0 ws0">ize<span class="_ _5"> </span>on<span class="_ _5"> </span>types<span class="_ _3"> </span>and<span class="_ _5"> </span>translate<span class="_ _5"> </span>the<span class="_ _5"> </span>program<span class="_ _5"> </span>to<span class="_ _5"> </span>C++.</div><div class="t m0 x34 h5 y98 ff2 fs3 fc0 sc0 ls0 ws0">McCloskey<span class="_ _8"> </span>(14)<span class="_ _d"> </span>has<span class="_ _d"> </span>work<span class="_ _d"> </span>in<span class="_ _d"> </span>progress<span class="_ _8"> </span>based<span class="_ _d"> </span>on<span class="_ _d"> </span>a<span class="_ _d"> </span>language-</div><div class="t m0 x2f h5 y99 ff2 fs3 fc0 sc0 ls0 ws0">independent<span class="_ _1"> </span>t<span class="_ _2"></span>ype<span class="_ _1"> </span>inference<span class="_ _d"> </span>that<span class="_ _1"> </span>is<span class="_ _d"> </span>used<span class="_ _1"> </span>to<span class="_ _1"> </span>generate<span class="_ _d"> </span>efficient<span class="_ _d"> </span>C</div><div class="t m0 x2f h5 y9a ff2 fs3 fc0 sc0 ls0 ws0">implementations<span class="_ _5"> </span>of<span class="_ _5"> </span>JavaScript<span class="_ _5"> </span>and<span class="_ _5"> </span>Python<span class="_ _5"> </span>programs.</div><div class="t m0 x34 h5 y9b ff1 fs3 fc0 sc0 ls0 ws0">Native<span class="_ _5"> </span>code<span class="_ _3"> </span>generation<span class="_ _5"> </span>by<span class="_ _5"> </span>interpreters.<span class="_ _3"> </span><span class="ff2">The<span class="_ _5"> </span>traditional<span class="_ _5"> </span>inter-</span></div><div class="t m0 x2f h5 y9c ff2 fs3 fc0 sc0 ls0 ws0">preter<span class="_ _6"> </span>design<span class="_ _6"> </span>is<span class="_ _6"> </span>a<span class="_ _6"> </span>virtual<span class="_ _6"> </span>machine<span class="_ _6"> </span>that<span class="_ _6"> </span>directly<span class="_ _6"> </span>ex<span class="_ _2"></span>ecutes<span class="_ _6"> </span>ASTs<span class="_ _6"> </span>or</div><div class="t m0 x2f h5 y9d ff2 fs3 fc0 sc0 ls0 ws0">machine-code-like<span class="_ _5"> </span>bytecodes.<span class="_ _7"> </span>Researchers<span class="_ _5"> </span>ha<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _5"> </span>sho<span class="_ _2"></span>wn<span class="_ _7"> </span>how<span class="_ _7"> </span>to<span class="_ _5"> </span>gen-</div><div class="t m0 x32 h5 y5b ff2 fs3 fc0 sc0 ls0 ws0">erate<span class="_ _3"> </span>nativ<span class="_ _2"></span>e<span class="_ _3"> </span>code<span class="_ _3"> </span>with<span class="_ _3"> </span>nearly<span class="_ _3"> </span>the<span class="_ _3"> </span>same<span class="_ _3"> </span>structure<span class="_ _3"> </span>but<span class="_ _3"> </span>better<span class="_ _3"> </span>perfor-</div><div class="t m0 x32 h5 y5c ff2 fs3 fc0 sc0 ls0 ws0">mance.</div><div class="t m0 x33 h5 y5d ff2 fs3 fc0 sc0 ls0 ws0">Call<span class="_ _6"> </span>threading,<span class="_ _6"> </span>also<span class="_ _3"> </span>known<span class="_ _6"> </span>as<span class="_ _6"> </span>conte<span class="_ _2"></span>xt<span class="_ _6"> </span>threading<span class="_ _6"> </span>(8),<span class="_ _3"> </span>compiles</div><div class="t m0 x32 h5 y5e ff2 fs3 fc0 sc0 ls0 ws0">methods<span class="_ _8"> </span>by<span class="_ _8"> </span>generating<span class="_ _d"> </span>a<span class="_ _8"> </span>nativ<span class="_ _2"></span>e<span class="_ _8"> </span>call<span class="_ _8"> </span>instruction<span class="_ _d"> </span>to<span class="_ _6"> </span>an<span class="_ _d"> </span>interpreter</div><div class="t m0 x32 h5 y5f ff2 fs3 fc0 sc0 ls0 ws0">method<span class="_ _3"> </span>for<span class="_ _6"> </span>each<span class="_ _6"> </span>interpreter<span class="_ _3"> </span>bytecode.<span class="_ _6"> </span>A<span class="_ _3"> </span>call-return<span class="_ _6"> </span>pair<span class="_ _3"> </span>has<span class="_ _6"> </span>been</div><div class="t m0 x32 h5 y60 ff2 fs3 fc0 sc0 ls0 ws0">shown<span class="_ _5"> </span>to<span class="_ _5"> </span>be<span class="_ _5"> </span>a<span class="_ _5"> </span>potentially<span class="_ _5"> </span>much<span class="_ _5"> </span>more<span class="_ _5"> </span>efficient<span class="_ _5"> </span>dispatch<span class="_ _5"> </span>mechanism</div><div class="t m0 x32 h5 y61 ff2 fs3 fc0 sc0 ls0 ws0">than<span class="_ _5"> </span>the<span class="_ _5"> </span>indirect<span class="_ _3"> </span>jumps<span class="_ _5"> </span>used<span class="_ _5"> </span>in<span class="_ _5"> </span>standard<span class="_ _5"> </span>bytecode<span class="_ _5"> </span>interpreters.</div><div class="t m0 x33 h5 y62 ff2 fs3 fc0 sc0 ls0 ws0">Inline<span class="_ _6"> </span>threading<span class="_ _6"> </span>(15)<span class="_ _6"> </span>copies<span class="_ _6"> </span>chunks<span class="_ _8"> </span>of<span class="_ _6"> </span>interpreter<span class="_ _6"> </span>nativ<span class="_ _2"></span>e<span class="_ _6"> </span>code</div><div class="t m0 x32 h5 y63 ff2 fs3 fc0 sc0 ls0 ws0">which<span class="_ _3"> </span>implement<span class="_ _5"> </span>the<span class="_ _3"> </span>required<span class="_ _3"> </span>bytecodes<span class="_ _3"> </span>into<span class="_ _5"> </span>a<span class="_ _3"> </span>nati<span class="_ _2"></span>ve<span class="_ _3"> </span>code<span class="_ _5"> </span>cache,</div><div class="t m0 x32 h5 y7 ff2 fs3 fc0 sc0 ls0 ws0">thus<span class="_ _5"> </span>acting<span class="_ _5"> </span>as<span class="_ _5"> </span>a<span class="_ _5"> </span>simple<span class="_ _7"> </span>per-method<span class="_ _5"> </span>JIT<span class="_ _5"> </span>compiler<span class="_ _5"> </span>that<span class="_ _5"> </span>eliminates<span class="_ _7"> </span>the</div><div class="t m0 x32 h5 y64 ff2 fs3 fc0 sc0 ls0 ws0">dispatch<span class="_ _5"> </span>overhead.</div><div class="t m0 x33 h5 y66 ff2 fs3 fc0 sc0 ls0 ws0">Neither<span class="_ _5"> </span>call<span class="_ _7"> </span>threading<span class="_ _5"> </span>nor<span class="_ _7"> </span>inline<span class="_ _5"> </span>threading<span class="_ _5"> </span>perform<span class="_ _7"> </span>type<span class="_ _5"> </span>special-</div><div class="t m0 x32 h5 y67 ff2 fs3 fc0 sc0 ls0 ws0">ization.</div><div class="t m0 x33 h5 y68 ff2 fs3 fc0 sc0 ls0 ws0">Apple’<span class="_ _2"></span>s<span class="_ _3"> </span>SquirrelFish<span class="_ _6"> </span>Extreme<span class="_ _6"> </span>(5)<span class="_ _6"> </span>is<span class="_ _6"> </span>a<span class="_ _6"> </span>Ja<span class="_ _2"></span>vaScript<span class="_ _3"> </span>implementa-</div><div class="t m0 x32 h5 y69 ff2 fs3 fc0 sc0 ls0 ws0">tion<span class="_ _3"> </span>based<span class="_ _3"> </span>on<span class="_ _3"> </span>call<span class="_ _3"> </span>threading<span class="_ _3"> </span>with<span class="_ _6"> </span>selecti<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _3"> </span>inline<span class="_ _3"> </span>threading.<span class="_ _3"> </span>Com-</div><div class="t m0 x32 h5 y6a ff2 fs3 fc0 sc0 ls0 ws0">bined<span class="_ _6"> </span>with<span class="_ _6"> </span>ef<span class="_ _2"></span>ficient<span class="_ _6"> </span>interpreter<span class="_ _6"> </span>engineering,<span class="_ _6"> </span>these<span class="_ _6"> </span>threading<span class="_ _3"> </span>tech-</div><div class="t m0 x32 h5 y6b ff2 fs3 fc0 sc0 ls0 ws0">niques<span class="_ _5"> </span>ha<span class="_ _2"></span>ve<span class="_ _5"> </span>gi<span class="_ _2"></span>v<span class="_ _2"></span>en<span class="_ _5"> </span>SFX<span class="_ _5"> </span>e<span class="_ _2"></span>xcellent<span class="_ _5"> </span>performance<span class="_ _7"> </span>on<span class="_ _5"> </span>the<span class="_ _5"> </span>standard<span class="_ _5"> </span>Sun-</div><div class="t m0 x32 h5 y6c ff2 fs3 fc0 sc0 ls0 ws0">Spider<span class="_ _5"> </span>benchmarks.</div><div class="t m0 x33 h5 y6d ff2 fs3 fc0 sc0 ls0 ws0">Google’<span class="_ _2"></span>s<span class="_ _8"> </span>V8<span class="_ _d"> </span>is<span class="_ _d"> </span>a<span class="_ _d"> </span>Ja<span class="_ _2"></span>v<span class="_ _2"></span>aScript<span class="_ _d"> </span>implementation<span class="_ _d"> </span>primarily<span class="_ _8"> </span>based</div><div class="t m0 x32 h5 y6e ff2 fs3 fc0 sc0 ls0 ws0">on<span class="_ _1"> </span>inline<span class="_ _d"> </span>threading,<span class="_ _1"> </span>with<span class="_ _d"> </span>call<span class="_ _1"> </span>threading<span class="_ _d"> </span>only<span class="_ _1"> </span>for<span class="_ _d"> </span>very<span class="_ _1"> </span>comple<span class="_ _2"></span>x</div><div class="t m0 x32 h5 y6f ff2 fs3 fc0 sc0 ls0 ws0">operations.</div><div class="t m0 x32 h9 y116 ff1 fs1 fc0 sc0 ls0 ws0">9.<span class="_ _a"> </span>Conclusions</div><div class="t m0 x32 h5 y2ac ff2 fs3 fc0 sc0 ls0 ws0">This<span class="_ _3"> </span>paper<span class="_ _5"> </span>described<span class="_ _3"> </span>how<span class="_ _5"> </span>to<span class="_ _3"> </span>run<span class="_ _3"> </span>dynamic<span class="_ _5"> </span>languages<span class="_ _3"> </span>efficiently<span class="_ _5"> </span>by</div><div class="t m0 x32 h5 y2ad ff2 fs3 fc0 sc0 ls0 ws0">recording<span class="_ _6"> </span>hot<span class="_ _6"> </span>traces<span class="_ _6"> </span>and<span class="_ _6"> </span>generating<span class="_ _8"> </span>type-specialized<span class="_ _6"> </span>nativ<span class="_ _2"></span>e<span class="_ _6"> </span>code.</div><div class="t m0 x32 h5 y2ae ff2 fs3 fc0 sc0 ls0 ws0">Our<span class="_ _3"> </span>technique<span class="_ _3"> </span>focuses<span class="_ _5"> </span>on<span class="_ _3"> </span>aggressiv<span class="_ _2"></span>ely<span class="_ _3"> </span>inlined<span class="_ _3"> </span>loops,<span class="_ _5"> </span>and<span class="_ _3"> </span>for<span class="_ _3"> </span>each</div><div class="t m0 x32 h5 y14 ff2 fs3 fc0 sc0 ls0 ws0">loop,<span class="_ _1"> </span>it<span class="_ _d"> </span>generates<span class="_ _1"> </span>a<span class="_ _d"> </span>tree<span class="_ _1"> </span>of<span class="_ _1"> </span>nati<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _1"> </span>code<span class="_ _d"> </span>traces<span class="_ _1"> </span>representing<span class="_ _d"> </span>the</div><div class="t m0 x32 h5 y37 ff2 fs3 fc0 sc0 ls0 ws0">paths<span class="_ _6"> </span>and<span class="_ _3"> </span>value<span class="_ _6"> </span>types<span class="_ _3"> </span>through<span class="_ _6"> </span>the<span class="_ _6"> </span>loop<span class="_ _6"> </span>observed<span class="_ _3"> </span>at<span class="_ _6"> </span>run<span class="_ _6"> </span>time.<span class="_ _3"> </span>W<span class="_ _2"></span>e</div><div class="t m0 x32 h5 y38 ff2 fs3 fc0 sc0 ls0 ws0">explained<span class="_ _3"> </span>how<span class="_ _3"> </span>to<span class="_ _3"> </span>identify<span class="_ _6"> </span>loop<span class="_ _3"> </span>nesting<span class="_ _3"> </span>relationships<span class="_ _6"> </span>and<span class="_ _3"> </span>generate</div><div class="t m0 x32 h5 y39 ff2 fs3 fc0 sc0 ls0 ws0">nested<span class="_ _1"> </span>traces<span class="_ _d"> </span>in<span class="_ _1"> </span>order<span class="_ _1"> </span>to<span class="_ _1"> </span>a<span class="_ _2"></span>v<span class="_ _2"></span>oid<span class="_ _1"> </span>e<span class="_ _2"></span>xcessi<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _1"> </span>code<span class="_ _d"> </span>duplication<span class="_ _1"> </span>due</div><div class="t m0 x32 h5 y3a ff2 fs3 fc0 sc0 ls0 ws0">to<span class="_ _d"> </span>the<span class="_ _1"> </span>man<span class="_ _2"></span>y<span class="_ _d"> </span>paths<span class="_ _d"> </span>through<span class="_ _d"> </span>a<span class="_ _1"> </span>loop<span class="_ _d"> </span>nest.<span class="_ _d"> </span>W<span class="_ _b"></span>e<span class="_ _1"> </span>described<span class="_ _d"> </span>our<span class="_ _d"> </span>type</div><div class="t m0 x32 h5 y3b ff2 fs3 fc0 sc0 ls0 ws0">specialization<span class="_ _d"> </span>algorithm.<span class="_ _1"> </span>W<span class="_ _b"></span>e<span class="_ _1"> </span>also<span class="_ _d"> </span>described<span class="_ _d"> </span>our<span class="_ _1"> </span>trace<span class="_ _d"> </span>compiler<span class="_ _2"></span>,</div><div class="t m0 x32 h5 y3c ff2 fs3 fc0 sc0 ls0 ws0">which<span class="_ _1"> </span>translates<span class="_ _d"> </span>a<span class="_ _d"> </span>trace<span class="_ _1"> </span>from<span class="_ _d"> </span>an<span class="_ _1"> </span>intermediate<span class="_ _d"> </span>representation<span class="_ _1"> </span>to</div><div class="t m0 x32 h5 y3d ff2 fs3 fc0 sc0 ls0 ws0">optimized<span class="_ _5"> </span>nativ<span class="_ _2"></span>e<span class="_ _5"> </span>code<span class="_ _5"> </span>in<span class="_ _3"> </span>tw<span class="_ _2"></span>o<span class="_ _5"> </span>linear<span class="_ _5"> </span>passes.</div><div class="t m0 x33 h5 y3e ff2 fs3 fc0 sc0 ls0 ws0">Our<span class="_ _6"> </span>experimental<span class="_ _3"> </span>results<span class="_ _6"> </span>show<span class="_ _3"> </span>that<span class="_ _6"> </span>in<span class="_ _6"> </span>practice<span class="_ _6"> </span>loops<span class="_ _6"> </span>typically</div><div class="t m0 x32 h5 y3f ff2 fs3 fc0 sc0 ls0 ws0">are<span class="_ _3"> </span>entered<span class="_ _3"> </span>with<span class="_ _3"> </span>only<span class="_ _6"> </span>a<span class="_ _3"> </span>fe<span class="_ _2"></span>w<span class="_ _3"> </span>different<span class="_ _3"> </span>combinations<span class="_ _3"> </span>of<span class="_ _3"> </span>value<span class="_ _3"> </span>types</div><div class="t m0 x32 h5 y40 ff2 fs3 fc0 sc0 ls0 ws0">of<span class="_ _3"> </span>variables.<span class="_ _3"> </span>Thus,<span class="_ _3"> </span>a<span class="_ _3"> </span>small<span class="_ _6"> </span>number<span class="_ _3"> </span>of<span class="_ _3"> </span>traces<span class="_ _3"> </span>per<span class="_ _6"> </span>loop<span class="_ _3"> </span>is<span class="_ _3"> </span>sufficient</div><div class="t m0 x32 h5 y41 ff2 fs3 fc0 sc0 ls0 ws0">to<span class="_ _8"> </span>run<span class="_ _8"> </span>a<span class="_ _8"> </span>program<span class="_ _8"> </span>efficiently<span class="_ _b"></span>.<span class="_ _8"> </span>Our<span class="_ _8"> </span>experiments<span class="_ _8"> </span>also<span class="_ _8"> </span>show<span class="_ _6"> </span>that<span class="_ _8"> </span>on</div><div class="t m0 x32 h5 y42 ff2 fs3 fc0 sc0 ls0 ws0">programs<span class="_ _5"> </span>amenable<span class="_ _5"> </span>to<span class="_ _3"> </span>tracing,<span class="_ _5"> </span>we<span class="_ _5"> </span>achie<span class="_ _2"></span>ve<span class="_ _5"> </span>speedups<span class="_ _5"> </span>of<span class="_ _5"> </span>2x<span class="_ _5"> </span>to<span class="_ _5"> </span>20x.</div><div class="t m0 x32 h9 y2af ff1 fs1 fc0 sc0 ls0 ws0">10.<span class="_ _a"> </span>Future<span class="_ _3"> </span>W<span class="_ _b"></span>ork</div><div class="t m0 x32 h5 y2b0 ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>ork<span class="_ _d"> </span>is<span class="_ _d"> </span>underway<span class="_ _8"> </span>in<span class="_ _d"> </span>a<span class="_ _d"> </span>number<span class="_ _d"> </span>of<span class="_ _d"> </span>areas<span class="_ _8"> </span>to<span class="_ _d"> </span>further<span class="_ _d"> </span>improv<span class="_ _2"></span>e<span class="_ _d"> </span>the</div><div class="t m0 x32 h5 y2b1 ff2 fs3 fc0 sc0 ls0 ws0">performance<span class="_ _3"> </span>of<span class="_ _3"> </span>our<span class="_ _3"> </span>trace-based<span class="_ _3"> </span>Ja<span class="_ _2"></span>v<span class="_ _2"></span>aScript<span class="_ _3"> </span>compiler<span class="_ _2"></span>.<span class="_ _5"> </span>W<span class="_ _2"></span>e<span class="_ _3"> </span>currently</div><div class="t m0 x32 h5 y2b2 ff2 fs3 fc0 sc0 ls0 ws0">do<span class="_ _8"> </span>not<span class="_ _d"> </span>trace<span class="_ _8"> </span>across<span class="_ _d"> </span>recursi<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _8"> </span>function<span class="_ _d"> </span>calls,<span class="_ _8"> </span>but<span class="_ _8"> </span>plan<span class="_ _d"> </span>to<span class="_ _8"> </span>add<span class="_ _8"> </span>the</div><div class="t m0 x32 h5 y25 ff2 fs3 fc0 sc0 ls0 ws0">support<span class="_ _3"> </span>for<span class="_ _3"> </span>this<span class="_ _3"> </span>capability<span class="_ _3"> </span>in<span class="_ _3"> </span>the<span class="_ _3"> </span>near<span class="_ _3"> </span>term.<span class="_ _3"> </span>W<span class="_ _b"></span>e<span class="_ _3"> </span>are<span class="_ _3"> </span>also<span class="_ _3"> </span>exploring</div><div class="t m0 x32 h5 y26 ff2 fs3 fc0 sc0 ls0 ws0">adoption<span class="_ _3"> </span>of<span class="_ _3"> </span>the<span class="_ _3"> </span>e<span class="_ _2"></span>xisting<span class="_ _3"> </span>w<span class="_ _2"></span>ork<span class="_ _3"> </span>on<span class="_ _5"> </span>tree<span class="_ _3"> </span>recompilation<span class="_ _3"> </span>in<span class="_ _3"> </span>the<span class="_ _3"> </span>conte<span class="_ _2"></span>xt</div><div class="t m0 x32 h5 y2b3 ff2 fs3 fc0 sc0 ls0 ws0">of<span class="_ _3"> </span>the<span class="_ _5"> </span>presented<span class="_ _3"> </span>dynamic<span class="_ _5"> </span>compiler<span class="_ _3"> </span>in<span class="_ _5"> </span>order<span class="_ _3"> </span>to<span class="_ _5"> </span>minimize<span class="_ _3"> </span>JIT<span class="_ _5"> </span>pause</div><div class="t m0 x32 h5 y2b4 ff2 fs3 fc0 sc0 ls0 ws0">times<span class="_ _3"> </span>and<span class="_ _5"> </span>obtain<span class="_ _5"> </span>the<span class="_ _3"> </span>best<span class="_ _5"> </span>of<span class="_ _3"> </span>both<span class="_ _5"> </span>worlds,<span class="_ _5"> </span>fast<span class="_ _3"> </span>tree<span class="_ _5"> </span>stitching<span class="_ _5"> </span>as<span class="_ _3"> </span>well</div><div class="t m0 x32 h5 y2b5 ff2 fs3 fc0 sc0 ls0 ws0">as<span class="_ _5"> </span>the<span class="_ _5"> </span>improved<span class="_ _5"> </span>code<span class="_ _5"> </span>quality<span class="_ _5"> </span>due<span class="_ _3"> </span>to<span class="_ _5"> </span>tree<span class="_ _5"> </span>recompilation.</div><div class="t m0 x33 h5 y2b6 ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _6"> </span>also<span class="_ _6"> </span>plan<span class="_ _6"> </span>on<span class="_ _6"> </span>adding<span class="_ _3"> </span>support<span class="_ _6"> </span>for<span class="_ _6"> </span>tracing<span class="_ _6"> </span>across<span class="_ _6"> </span>regular<span class="_ _3"> </span>ex-</div><div class="t m0 x32 h5 y2b7 ff2 fs3 fc0 sc0 ls0 ws0">pression<span class="_ _d"> </span>substitutions<span class="_ _d"> </span>using<span class="_ _d"> </span>lambda<span class="_ _d"> </span>functions,<span class="_ _d"> </span>function<span class="_ _d"> </span>applica-</div><div class="t m0 x32 h5 y2b8 ff2 fs3 fc0 sc0 ls0 ws0">tions<span class="_ _d"> </span>and<span class="_ _d"> </span>e<span class="_ _2"></span>xpression<span class="_ _d"> </span>e<span class="_ _2"></span>valuation<span class="_ _8"> </span>using<span class="_ _d"> </span><span class="ff7">eval</span>.<span class="_ _d"> </span>All<span class="_ _d"> </span>these<span class="_ _d"> </span>language</div><div class="t m0 x32 h5 y2b9 ff2 fs3 fc0 sc0 ls0 ws0">constructs<span class="_ _8"> </span>are<span class="_ _6"> </span>currently<span class="_ _8"> </span>executed<span class="_ _6"> </span>via<span class="_ _8"> </span>interpretation,<span class="_ _8"> </span>which<span class="_ _8"> </span>limits</div><div class="t m0 x32 h5 y2ba ff2 fs3 fc0 sc0 ls0 ws0">our<span class="_ _5"> </span>performance<span class="_ _5"> </span>for<span class="_ _3"> </span>applications<span class="_ _5"> </span>that<span class="_ _5"> </span>use<span class="_ _5"> </span>those<span class="_ _5"> </span>features.</div><div class="t m0 x32 h9 yff ff1 fs1 fc0 sc0 ls0 ws0">Acknowledgments</div><div class="t m0 x32 h5 y96 ff2 fs3 fc0 sc0 ls0 ws0">Parts<span class="_ _6"> </span>of<span class="_ _6"> </span>this<span class="_ _6"> </span>effort<span class="_ _6"> </span>hav<span class="_ _2"></span>e<span class="_ _6"> </span>been<span class="_ _6"> </span>sponsored<span class="_ _6"> </span>by<span class="_ _8"> </span>the<span class="_ _6"> </span>National<span class="_ _6"> </span>Science</div><div class="t m0 x32 h5 y97 ff2 fs3 fc0 sc0 ls0 ws0">Foundation<span class="_ _5"> </span>under<span class="_ _5"> </span>grants<span class="_ _7"> </span>CNS-0615443<span class="_ _5"> </span>and<span class="_ _5"> </span>CNS-0627747,<span class="_ _5"> </span>as<span class="_ _5"> </span>well</div><div class="t m0 x32 h5 y98 ff2 fs3 fc0 sc0 ls0 ws0">as<span class="_ _3"> </span>by<span class="_ _6"> </span>the<span class="_ _6"> </span>California<span class="_ _3"> </span>MICR<span class="_ _2"></span>O<span class="_ _3"> </span>Program<span class="_ _6"> </span>and<span class="_ _6"> </span>industrial<span class="_ _3"> </span>sponsor<span class="_ _6"> </span>Sun</div><div class="t m0 x32 h5 y99 ff2 fs3 fc0 sc0 ls0 ws0">Microsystems<span class="_ _5"> </span>under<span class="_ _5"> </span>Project<span class="_ _3"> </span>No.<span class="_ _5"> </span>07-127.</div><div class="t m0 x33 h5 y9a ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _3"> </span>U.S.<span class="_ _5"> </span>Gov<span class="_ _2"></span>ernment<span class="_ _5"> </span>is<span class="_ _3"> </span>authorized<span class="_ _5"> </span>to<span class="_ _3"> </span>reproduce<span class="_ _5"> </span>and<span class="_ _3"> </span>distrib<span class="_ _2"></span>ute</div><div class="t m0 x32 h5 y9b ff2 fs3 fc0 sc0 ls0 ws0">reprints<span class="_ _5"> </span>for<span class="_ _5"> </span>Governmental<span class="_ _5"> </span>purposes<span class="_ _5"> </span>notwithstanding<span class="_ _5"> </span>any<span class="_ _5"> </span>copyright</div><div class="t m0 x32 h5 y9c ff2 fs3 fc0 sc0 ls0 ws0">annotation<span class="_ _5"> </span>thereon.<span class="_ _5"> </span>An<span class="_ _2"></span>y<span class="_ _5"> </span>opinions,<span class="_ _7"> </span>findings,<span class="_ _5"> </span>and<span class="_ _5"> </span>conclusions<span class="_ _7"> </span>or<span class="_ _5"> </span>rec-</div><div class="t m0 x32 h5 y9d ff2 fs3 fc0 sc0 ls0 ws0">ommendations<span class="_ _6"> </span>expressed<span class="_ _3"> </span>here<span class="_ _6"> </span>are<span class="_ _6"> </span>those<span class="_ _3"> </span>of<span class="_ _6"> </span>the<span class="_ _6"> </span>author<span class="_ _6"> </span>and<span class="_ _3"> </span>should</div></div><div class="pi" data-data='{"ctm":[1.673203,0.000000,0.000000,1.673203,0.000000,0.000000]}'></div></div></div>
|