[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: compilation, loading, and running times of Oz using CMU CL vs Allegro

> Could you tell us how to build and run this application?  It sounds like it
> might be a good benchmark to do some tuning based on.

Oz lives in /afs/cs.cmu.edu/project/oz/oz2/exp/. Ask Joe to give you write
permission to the cmucl subdirectories of the home, system and tea
subdirectories of exp. (The alternative is to copy this directory and
subdirectories somewhere else, but then you'll have to change a lot of

To run Oz, load registry/defsystem.lisp (I haven't compiled Oz's version of
defsystem for CMUCL, but it shouldn't make much of a difference). Then execute
	(mk:load-system 'cmucl-home :compile-during-load nil)
to load the CMUCL version of the home system. It will automatically load the
CMUCL versions of tea-lib and oz as well. (The difference between the CMUCL and
regular versions of the systems lies in the pathnames for the binary files. I
probably could specialize this in the main system definitions, but it was
quicker to just define new systems.) To have it compile any files which have
changed, execute
	(mk:load-system 'cmucl-home :compile-during-load t)
[you may also need to add in :force :new-source]. To recompile all of the files
in the systems, do
	(mk:compile-system 'cmucl-home :force :all)

> You might be interested to know that Mach currently has very poor paging
> performance on Sparcs.  We have found that CMU CL compiles 3x faster on a
> SunOS Sparc. 

There is also a bug in the handling of the tlb (actually, mmu) cache which makes
sparc performance using MACH degrade considerably with greater than 32mb of RAM,
since the MMU addresses up to 32mb. Steve Berman is working on fixing it. (We
discovered that Allegro on a sparc-2 went from 10 times slower than Allegro
on a 24mb sparc-1 to twice as fast when we took it down from 52mb of memory to

> It is rather inevitable that CMU CL will compile slower than Allegro, but
> the magnitude of the slowdowns (especially run-time) are alarming.

Size is also important. We can run two Oz's on a 24 mb sparc-1 using
Allegro while we can barely run a single Oz using CMU CL.

Just for reference, Oz on a PMAX in Allegro 3.1.3 runs 5-10 times slower than on
a sparc-1, even though a sparc-1 is a slower machine than a PMAX. The difference
between Allegro 3.1.3. and 4.0.1 is mainly in the existence of native CLOS.
So I would guess that CMU CL's performance will improve considerably for Oz when
it gets native CLOS instead of PCL. 

BTW, we just cut our Allegro running time in half by fiddling with some of
Allegro's gsgc parameters. (Essentially, we force Allegro to allocate a huge
block of newspace, so that it doesn't GC during loading of Oz, and then tenure
the contents of newspace. Apparently ephemeral GC was taking almost half of the
loading time for Oz under Allegro.) So instead of being 15 times slower, CMUCL
is now 30 times slower.