Rekursiv (was: Interval Smalltalk redux)

Jecel Assumpcao Jr jecel at merlintec.com
Fri Oct 4 21:11:32 UTC 2002


On Friday 04 October 2002 01:44, Ian Piumarta wrote:
> On Thu, 3 Oct 2002, Tim Rowledge wrote:
> > SUN tried at least acouple of times for java nad seem to have
> > failed. SOAR was not very effective, Sword/32 failed, iAPX432 was a
> > dog, etc etc.

I thought SOAR was a great success. It was just never cleaned up and 
finished, as is typical of student projects.

What iAPX432? It has been eliminated from all processor histories I can 
find. It seems that the 386 is now officially Intel's very first 32 bit 
processor. Of course, for those of us who really miss the old 432 they 
are doing IA64 ;-)

> I worked for a while on the REKURSIV project (a microcoded chipset
> for oo languages) that did GC, binding, etc. -- the whole kaboodle --
> in h/w. (Even the microcode talked about objects.)  It was hosted by
> a Sun3 (it plugged directly into the backplane).  It had its own
> language called Lingo.  While waiting for the hardware somebody
> implemented an interpreter in C.  By the time Lingo ran on the
> hardware, the interpreter (running on a Sun3) was faster than Lingo
> running on the hardware.

"It will not do to leave a live dragon out of your plans if you live 
near one." J.R.R.TOLKIEN in The Hobbit

In this case the dragon is Moore's law being ridden by the main cpu 
makers. Add to that the fact that software implementors can easily come 
up with new and brilliant ideas to make things faster. Remember: 
hardware can know the past but only the compiler can look into the 
future!

That said, the Rekursiv was interesting and worth studying:

  http://www.brouhaha.com/~eric/retrocomputing/rekursiv/

It did have against it some bad timing - the late 1980s were not very 
kind to microcoded machines. It was an era when RISCs ruled the earth. 
I think that this became clear to the Mushroom people (Ian, do you have 
any comments about your participation in that one?):

  http://www.wolczko.com/mushroom/index.html

To answer Tommy Thorn's question about what would be nice to have in a 
Smalltalk cpu - the Mushroom used virtually addressed caches. That is, 
you passed to the cache the pair {ObjectID, offset} and it would return 
a word. You only have to convert the virtual address to a physical 
memory address when you have a cache miss. So you can have all kinds of 
indirections (object tables, for example) and it doesn't cost you too 
much.

Another nice feature was that their generational garbage collector used 
the cache exclusively in the youngest generation. So an object could be 
created and later collected without causing a single external memory 
reference if you got really lucky. As Tim explained the three most 
important things are memory bandwidth, memory bandwidth and memory 
bandwidth. This was a neat way to get it.

One thing that is annoying if you try to do a cpu to directly execute 
bytecodes is that you have two sources of information in the 
instructions: the bytecodes themselves and the literals. Most 
processors have their literals mixed in the instruction stream, so as 
you gobble it up they are right there when you need them.

Another problem with direct bytecode execution is that "you do as you 
are told" and execute every single message send implied in the source 
code. Modern compilation technology eliminates most sends (Self, 
Hotspot Java and StrongTalk). In my smallest design (I am currently 
working on three different architectures and have a fourth one that is 
paused do to the lack of time) I have a one clock message send and two 
clock return (assuming the cache hits), yet the Self compiler can often 
get negative message send times! How can you compete with that? The 
negative times were obtained by inlining a message send and then using 
the new context information to optimize the inlined code so it was far 
smaller and faster than the original.

About FPGAs - these didn't improve much through most of the 1990s but 
now are advancing at an impressive pace. If you can do something 
interesting with an FPGA you get to ride Moore's law with the big boys. 
A FPGA with MicroBlaze, Nios or XSOC/xr16 is very competitive in both 
price and performance with "normal" embedded processors (at least 
between the smallest PICs and the StrongARM). And if you can tweak it 
to run something like Smalltalk instead of yet another gcc driven MIPs 
clone it really becomes worth it. My smallest machine costs $15 in 
single quantities. I'll have some tiny benchmark numbers soon to put 
that into the proper perspective.

BTW, what I wrote about hardware/software above supposes that the 
hardware can't inline and optimize code, eliminate message sends, etc. 
But I figured out how to do exactly that. Unfortunately this email is 
too long already.... ;-)

-- Jecel



More information about the Squeak-dev mailing list