Re: GLIL->C compilation
On Sat 20 Nov 2010 00:56, l...@gnu.org (Ludovic Courtès) writes: >> Yes on one of my machine one loop takes about 6ns for the compiled one and >> about 50ns for the bytcode, say a factor of 7-10 for simple tasks, but >> remember >> this is for rather trivial work. > > Woow, I didn’t expect so much. I would expect it, yes. Something aroung 5x for dispatch, with more if the compiler decided to inline more things across "instruction" boundaries. Andy -- http://wingolog.org/
Re: GLIL->C compilation
Stefan Israelsson Tampe writes: > On Saturday, November 20, 2010 12:11:16 am Ludovic Courtès wrote: >> Hi, >> >> Stefan Israelsson Tampe writes: >> > #include "cfkn.h" >> > #define LOCAL_REF(i) fp[i] >> > #define LOCAL_SET(i,v) fp[i] = (v) >> > void cfkn3676(SCM *fp, SCM **spp) >> > { >> > >> > /* setup of environment */ >> > SCM *objects, *free, program, *sp, sss[100]; >> > sp = sss; >> > program = fp[-1]; >> > objects = SCM_I_VECTOR_WELTS (SCM_PROGRAM_OBJTABLE (program)); >> > free= SCM_PROGRAM_FREE_VARIABLES(program); >> > /* compiled section */ >> > >> > LCASE3666: >> > goto L3668; >> > LCASE3665: >> > sp++; *sp = LOCAL_REF(1); >> > sp++; *sp = SCM_I_MAKINUM(0); >> > sp-=2; if(!scm_is_eq(sp[1],sp[2])) goto L3669; >> > sp++; *sp = LOCAL_REF(2); >> >> [...] >> >> Comparing this to the VM’s bytecode interpreter should show the overhead >> incurred by instruction dispatch. >> >> Did you try to measure this? That’d be interesting. >> >> Thanks, >> Ludo’. > > Yes on one of my machine one loop takes about 6ns for the compiled one and > about 50ns for the bytcode, say a factor of 7-10 for simple tasks, but > remember > this is for rather trivial work. Woow, I didn’t expect so much. Ludo’.
Re: GLIL->C compilation
On Saturday, November 20, 2010 12:11:16 am Ludovic Courtès wrote: > Hi, > > Stefan Israelsson Tampe writes: > > #include "cfkn.h" > > #define LOCAL_REF(i) fp[i] > > #define LOCAL_SET(i,v) fp[i] = (v) > > void cfkn3676(SCM *fp, SCM **spp) > > { > > > > /* setup of environment */ > > SCM *objects, *free, program, *sp, sss[100]; > > sp = sss; > > program = fp[-1]; > > objects = SCM_I_VECTOR_WELTS (SCM_PROGRAM_OBJTABLE (program)); > > free= SCM_PROGRAM_FREE_VARIABLES(program); > > /* compiled section */ > > > > LCASE3666: > > goto L3668; > > LCASE3665: > > sp++; *sp = LOCAL_REF(1); > > sp++; *sp = SCM_I_MAKINUM(0); > > sp-=2; if(!scm_is_eq(sp[1],sp[2])) goto L3669; > > sp++; *sp = LOCAL_REF(2); > > [...] > > Comparing this to the VM’s bytecode interpreter should show the overhead > incurred by instruction dispatch. > > Did you try to measure this? That’d be interesting. > > Thanks, > Ludo’. Yes on one of my machine one loop takes about 6ns for the compiled one and about 50ns for the bytcode, say a factor of 7-10 for simple tasks, but remember this is for rather trivial work.
GLIL->C compilation
Hi, Stefan Israelsson Tampe writes: > #include "cfkn.h" > #define LOCAL_REF(i) fp[i] > #define LOCAL_SET(i,v) fp[i] = (v) > void cfkn3676(SCM *fp, SCM **spp) > { > /* setup of environment */ > SCM *objects, *free, program, *sp, sss[100]; > sp = sss; > program = fp[-1]; > objects = SCM_I_VECTOR_WELTS (SCM_PROGRAM_OBJTABLE (program)); > free= SCM_PROGRAM_FREE_VARIABLES(program); > /* compiled section */ > LCASE3666: > > > goto L3668; > LCASE3665: > sp++; *sp = LOCAL_REF(1); > sp++; *sp = SCM_I_MAKINUM(0); > sp-=2; if(!scm_is_eq(sp[1],sp[2])) goto L3669; > sp++; *sp = LOCAL_REF(2); [...] Comparing this to the VM’s bytecode interpreter should show the overhead incurred by instruction dispatch. Did you try to measure this? That’d be interesting. Thanks, Ludo’.