mit-scheme-devel
[Top][All Lists]
Advanced

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

[MIT-Scheme-devel] Symmetric MultiProcessing


From: Friar Puck
Subject: [MIT-Scheme-devel] Symmetric MultiProcessing
Date: Tue, 25 Nov 2014 13:22:47 -0700

Bless me, Schemers, for I have Schemed.

It has been 19 months since my last confession and I collapse wave
functions with you now only because of a potent portent of fascinating
fun.

Brothers, rejoice with me!  I have an SMP world running multiple
Scheme machines!  So far they only execute an SMP-IDLE primitive, but
they can wake up, service the global-gc interrupt, and get back to
idle, multiple times!  I haven't dared run anything fancier than that
one interrupt handler, which does little more than apply the
SMP-GC-WAIT primitive and return.  There are a few more things to
prepare before I let loose the threads of fun.

I wrote an overview of how all the interlocking works (or is intended
to work) and put it in the top-level directory in a file named
README.txt in my SMP branch.  If you are tempted to take more than a
gander, be forewarned that I have been liberally rebasing.  In fact, I
have split up the original big proof-of-concept convulsion/commit into
more easily digested chunks, just for y'all.  The first few commits

    e1a309d smp: Clobber fluid-let and the (runtime state-space) package.
    f352b2a smp: Accommodate multiple processors.
    3b272b5 smp: Serialize access to (runtime thread) internals.

might find their way onto master in spite of their cost.  (Finding the
current-thread is no longer as simple as accessing a variable.  It
requires a tiny primitive apply to get a processor id followed by a
vector lookup.)  (You'll never feel it.)

There is still much to do before I want to run on multiple cores.  I
think first SOMEONE should review the use of without-interrupts in the
runtime system.  It is no longer atomic.  And SOMEONE should look at
every global variable in the microcode.  Each deserves to be
thread-local or protected by explicit serialization.  SOMEONE is going
to be very busy.

Yours in Scheme,
SOMEONE

$ git remote add puck git://birchwood-abbey.net/~matt/mit-scheme.git
$ git fetch puck SMP
$ git checkout puck/SMP
$ cd src/
$ ./Setup.sh
$ ./configure --enable-smp
$ make tags all check



reply via email to

[Prev in Thread] Current Thread [Next in Thread]