[comp.arch] Number of registers, windows

pcg@thor.cs.aber.ac.uk (Piercarlo Grandi) (07/11/89)

I was rereading some articles on register windows, and I found again a
relatively old paper that contributed to my old opinion that you don't
need many registers.

It is "a Reduced register file for RISC architectures", in CompArchNews,
Sept. 1985.

The authors (Huguet et Lang, UCLA) start off with the same reservations
I had voiced about large register sets (probably I was just unconsciously
repeating them), i.e. large chip area, cost of context switch, lengthening
of cycle time.

They advance some interesting proposals,a nd have some intriguing
results.  The proposal (that apparently the 29k guys took well)
was to have multiple sized windows, i.e. essentially a flat
register file, organized mostly by convention as a set of windows
(of a few discrete sizes). They find that this is remarkably
effective.

The interesting figure is that they find that a 32 registers file
with windows of 4 registers (8 and 12 are much more rare) are
very effective. Now 32 is fairly small as things go these days,
and the size of the window is quite small as well.

	Note that they have 4 registers overlapped for arg passing,
	and there are 4 registers for global register variables. Note also
	that they are using PCC, without coloring; but then coloring (if it
	uses or	estimates dynamic usage) is supposed to do even better :->.

And there is still the argument (that I find mildly persuasive)
that windows are not necessarily always optimal (ask MIPSco and
the Titan people... but on the other hand I would not object to
such a small register file).

As to this, the paper actually says that the windowing scheme
they prefer is virtually invisible (like the i860 one), as the
instructions denote registers only with 4 bits (16 regs == 12
regs for largest window plus 4 regs for globals), i.e. the
program only sees the current window.

Rereading this paper has amused me greatly, there are some little
numbers here and there ("Pyramid 90x and Celerity C1200 have a
single window size of 32 registers. Our measurements have not
shown any reason for such a large window size because with a
window size of 24 registers all local simple variables can be
allocated to registers" ... "our measurements show that only 0.2%
of the data objects are local simple variables with the address
operator and they account for 0.0013% of the executed objects")
that tend to be so unfashionable... :->


--
Piercarlo "Peter" Grandi           | ARPA: pcg%cs.aber.ac.uk@nsfnet-relay.ac.uk
Dept of CS, UCW Aberystwyth        | UUCP: ...!mcvax!ukc!aber-cs!pcg
Penglais, Aberystwyth SY23 3BZ, UK | INET: pcg@cs.aber.ac.uk