Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.compilers > #1925
| From | bartc <bc@freeuk.com> |
|---|---|
| Newsgroups | comp.compilers |
| Subject | Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. |
| Date | 2017-10-07 19:05 +0100 |
| Organization | virginmedia.com |
| Message-ID | <17-10-011@comp.compilers> (permalink) |
| References | <17-10-001@comp.compilers> <17-10-004@comp.compilers> <17-10-009@comp.compilers> |
On 07/10/2017 17:55, George Neuner wrote: >> Am 05.10.2017 um 18:29 schrieb Robert Jacobson: >>> I am trying to wrap my mind around the issue of dynamic dispatch in the >>> context of switching on opcode in a bytecode interpreter ... > Unfortunately, on modern CPUs, *all* branches are predicted. An > indirect jump through the table will mispredict virtually every time. > The same will be true of an indirect jump via register based address. > > The best you can do with an interpreter is to have all the code in L1 > code cache. As soon as you have to go to L2 (which typically is > shared between code and data) or deeper, you risk taking large hits if > the code is not resident. > > comp.lang.asm.x86 has seen extensive discussions of mispredict > problems in interpreters and JIT compiled code. The conclusions there > are applicable to most CPU architectures. I tried an experiment a few years ago, where the byte-code for a test program was expanded into a sequence of instructions in a statically compiled language (or it might have been done at run-time; I can't remember). Each byte-code was represented by some mix of function call, or some inline code. This would have been expected to benefit by eliminating dispatch overheads (it just steps into the next lot of code like an ordinary program), and also by having dedicated code for some things that were otherwise a parameter in a generic byte-code instruction. But in fact the results weren't that great at all; most normal dispatchers were actually faster! Perhaps it was affected by having to fill up the instruction cache with 1000 copies of the same PUSH code sequence, instead of re-using the same single copy when running the byte-code dispatcher. -- bartc
Back to comp.compilers | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Opcode handler dispatch in an interpreter: Implementing switch on OpCode. Robert Jacobson <rljacobson@gmail.com> - 2017-10-05 09:29 -0700
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. bartc <bc@freeuk.com> - 2017-10-05 21:14 +0100
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2017-10-06 02:56 +0200
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. George Neuner <gneuner2@comcast.net> - 2017-10-07 12:55 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. bartc <bc@freeuk.com> - 2017-10-07 19:05 +0100
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. George Neuner <gneuner2@comcast.net> - 2017-10-08 14:36 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. bartc <bc@freeuk.com> - 2017-10-08 22:49 +0100
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2017-10-11 18:13 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. bartc <bc@freeuk.com> - 2017-10-17 15:54 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. bartc <bc@freeuk.com> - 2017-10-11 18:12 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2017-10-11 18:12 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. George Neuner <gneuner2@comcast.net> - 2017-10-17 15:55 -0400
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2017-10-08 13:41 +0000
Re: Opcode handler dispatch in an interpreter: Implementing switch on OpCode. anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2017-10-06 22:32 +0000
csiph-web