[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