> Indeed. From the paper:
>
> "A long-running question in the design of VMs is
whether stack
> architecture or register architecture can be
implemented more
> efficiently with an interpreter. On the one hand stack
architectures
> allow smaller VM code so less code must be fetched per
VM instruction
> executed. On the other hand, stack machines require
more VM
> instructions for a given computation, each of which
requires an
> expensive (usually unpredictable) indirect branch for
VM instruction
> dispatch. Several authors have discussed the issue [12,
15, 11, 16]
> and presented small examples where each architecture
performs better,
> but no general conclusions can be drawn without a
larger study."
>
> It later states:
>
> "We find that the increased cost of fetching more
VM code [in register
> machines] involves only 1.07 extra real machine loads
per VM
> instruction eliminated. Given that VM dispatches are
much more
> expensive than real machine loads, this indicates
strongly that
> register VM code is likely to be much more
time-efficient when
> implemented with an interpreter, although at the cost
of increased VM
> code size."
>
> However:
>
> "As the cost of dispatches falls, any benefit from
using a register VM
> instead of a stack VM falls. However, switch and simple
threaded
> dispatch are the most commonly used interpreter
techniques, and switch
> is the only efficient alternative if ANSI C must be
used."
>
> Hope it helps.
Yes, but they are talking here about interpreter loop.
Performances in
Neko are not focused on the interpreter itself (for example
I'm not
using a threaded loop) but on the x86 JIT compiler which
eliminate all
the dispatching cost since bytecode is mapped to native
opcodes.
Nicolas
--
Neko : One VM to run them all
(http://nekovm.org)
|