[project @ 1999-11-02 15:05:38 by simonmar]
authorsimonmar <unknown>
Tue, 2 Nov 1999 15:06:05 +0000 (15:06 +0000)
committersimonmar <unknown>
Tue, 2 Nov 1999 15:06:05 +0000 (15:06 +0000)
commitf6692611aad945e46ffb615bde1df7def3fc742f
tree04e2e2af9c43eba1b60312b89eb3ac8f34209e2c
parent947d2e363f75e9e230d535c876ecdafba45174b5
[project @ 1999-11-02 15:05:38 by simonmar]
This commit adds in the current state of our SMP support.  Notably,
this allows the new way 's' to be built, providing support for running
multiple Haskell threads simultaneously on top of any pthreads
implementation, the idea being to take advantage of commodity SMP
boxes.

Don't expect to get much of a speedup yet; due to the excessive
locking required to synchronise access to mutable heap objects, you'll
see a slowdown in most cases, even on a UP machine.  The best I've
seen is a 1.6-1.7 speedup on an example that did no locking (two
optimised nfibs in parallel).

- new RTS -N flag specifies how many pthreads to start.

- new driver -smp flag, tells the driver to use way 's'.

- new compiler -fsmp option (not for user comsumption)
  tells the compiler not to generate direct jumps to
  thunk entry code.

- largely rewritten scheduler

- _ccall_GC is now done by handing back a "token" to the
  RTS before executing the ccall; it should now be possible
  to execute blocking ccalls in the current thread while
  allowing the RTS to continue running Haskell threads as
  normal.

- you can only call thread-safe C libraries from a way 's'
  build, of course.

Pthread support is still incomplete, and weird things (including
deadlocks) are likely to happen.
42 files changed:
ghc/compiler/absCSyn/AbsCSyn.lhs
ghc/compiler/absCSyn/CLabel.lhs
ghc/compiler/absCSyn/PprAbsC.lhs
ghc/compiler/codeGen/CgClosure.lhs
ghc/compiler/codeGen/CgTailCall.lhs
ghc/compiler/codeGen/ClosureInfo.lhs
ghc/compiler/main/CmdLineOpts.lhs
ghc/driver/ghc.lprl
ghc/includes/MachRegs.h
ghc/includes/PrimOps.h
ghc/includes/Regs.h
ghc/includes/Rts.h
ghc/includes/RtsAPI.h
ghc/includes/SMP.h [new file with mode: 0644]
ghc/includes/SchedAPI.h
ghc/includes/Stg.h
ghc/includes/StgMacros.h
ghc/includes/StgMiscClosures.h
ghc/includes/StgStorage.h
ghc/includes/Updates.h
ghc/rts/BlockAlloc.h
ghc/rts/ClosureFlags.c
ghc/rts/GC.c
ghc/rts/Main.c
ghc/rts/PrimOps.hc
ghc/rts/Profiling.c
ghc/rts/RtsAPI.c
ghc/rts/RtsFlags.c
ghc/rts/RtsFlags.h
ghc/rts/RtsStartup.c
ghc/rts/Schedule.c
ghc/rts/Schedule.h
ghc/rts/Signals.c
ghc/rts/Stats.c
ghc/rts/StgMiscClosures.hc
ghc/rts/StgRun.S
ghc/rts/StgRun.h
ghc/rts/StgStdThunks.hc
ghc/rts/Storage.c
ghc/rts/Storage.h
ghc/rts/StoragePriv.h
ghc/rts/Updates.hc