From: Armin R. <ar...@tu...> - 2003-09-07 19:13:13
|
Hello Rene, On Sat, Sep 06, 2003 at 01:29:16PM +1000, Rene Dudfield wrote: > If it does make a difference, you could you have modes for accepting > different instructions. Different modes could use different instruction > pairing. So that you could make a few different sets which had more > combinations. That's an idea, although your computations are unrealistic because there are sequences of quite more than 2 instructions that are very frequent. Having all of them available isn't possible, and even with a limited number of these, as you point out, knowing when to switch to another instruction set dynamically isn't obvious. Although it would be interesting. Another aspect of the optimization is that it is currently based on the static distribution of instructions in some dump file, but parts of the program are executed much more often than others. If this were taken into account, I expect the most inner loops of a program to reduce to only 1-2 instructions ! And as these instructions are just done with C code, the net result is that you have an efficient GCC-compiled version of the loop ! That could theoretically prove even faster than the native i386 back-end (possibly). The ivm has other tunable parameters too. I could try to measure how the performance depends, say, on the size of the instruction set. There are 71 basic instructions. I wonder for example if a combined instruction set of more than 255 instructions would pay off. Another tunable parameter is the caching of top-of-stack elements: the ivm stack is stored in memory as a conventional stack, excepted for the first element, which is kept into a local variable instead. On processors with a lot of registers it may be interesting to cache the 2-3 first elements instead, but I'm not sure. I'll experiment on a PowerPC. A bientot, Armin. |