new clm

Bill Schottstaedt bil@ccrma.Stanford.EDU
Mon, 11 Apr 94 09:38:37 -0700


In 1990 when I started work on CLM, DSP chips were faster for sound
synthesis than main processors, and much work was being done to
develop multi-DSP hardware. At the time it was not unreasonable to
suppose that special purpose chips of that sort would continue to
offer better performance at a better price. I set up CLM to make it
easier to support whatever DSP chips came along.  Even as late as last
December, I was preparing to provide CLM support for the AT&T 3210 on
the Mac.  But the world has gone in a different direction: the 3210 is
no longer included in Macs, the 56000 has not improved much in the
last 4 years, the Ariel QP has been taken off the market; the final
straw from my point of view is that timing tests indicate that a
Pentium running C can outperform the 56000 by a factor of at least 3.
In some cases, it outperformed a NeXT with 2 QP boards!

So, the new version of CLM is different from previous versions.
I've flushed the c56 and clu packages, collapsing everything into the
clm package.  The 56000 code is still available, but even on the NeXT,
the 68040 matches the 56000 except when you have an Ariel QP board.
To avoid name conflicts, and to reflect the new structure of CLM,
several functions and structs have been renamed.  The C unit generator
option has been completely rewritten, increasing CLM's speed on
non-DSP systems by factors of 10 or better.  Because the C unit generators
live in the same memory as the main lisp program, many ugly
limitations of the 56000 version have been removed.  The main name
changes are that blk is now rblk, *cl-music-date* is *clm-date* (and
others similarly), and describe-structure-for-run has been replaced by
a slightly different macro def-clm-struct.  User defined C functions
can be called in run without any overhead.  There are no memory
limitations that I know of, so C-side instruments can be any size and
make use of long delay lines, for example, without an enormous speed
penalty.  README.clm has the new benchmarks.  AKCL users need to load
the clm library into AKCL before running.  This version of CLM is not
backwards compatible with previous versions -- you'll have to
recompile your instruments, delete any references to the c56 or clu
packages, and fix up references to obsolete functions and so on.

I got simple cases of the new C version to run on the Mac, but
it was still 10 times slower than the NeXT, so I haven't yet found
the energy and desire to tackle the remaining bugs -- they appear
to be related to the Mac's stupid floating point implementation.