From: Daniel B. <da...@te...> - 2005-02-06 01:31:56
|
Subscribers to the sbcl-commits list will have observed already that I've been hacking amd64 threads. IRC denizens will know that it's based on pthreads this time, not on clone(). The current status is - the basic runtime support stuff (thread creation, gc, etc) is there. Except for the cleanup routines, which aren't. - the lisp support stuff (mostly involves vops for special variable operations) is there - it builds, compiles PCL and dumps a core capable of executing (sb-thread:make-thread (lambda () (sleep 1) (format t "hello~%"))) Untested or known to be missing - stack exhaustion checking is broken - because, well, it's always the first thing to break - almost anything to do with locking, though the futex locking is still in there and still ought still to work, given that I'm still on a Linux system. Obviously it would be nice to remove this requirement, though, so that other platforms with pthreads can also build threaded sbcl - any kind of stress testing - the assembly stuff is believed not to be saving/restoring all the registers it needs to - at least, this is not working on jsnell's system FAQ Q1) why pthreads now when you previosuly said it was crap? A1) No, I said that _LinuxThreads_ was crap - and indeed it was. Happily, it's obsolete these days. Q2) segment registers? A2) No, the amd64 has more than a stupidly small number of general purpose registers available, so we've dedicated r12 to thread base Q3) thread objects? A3) may well be forthcoming. pthreads aren't identified by pids as clone-based threads are, but by pointers (actually, on sufficiently weird systems even this isn't true - a pthread_t may even be a structure) which look really ugly when printed. Q4) other architectures? A4) should be possible. you need to choose a thread base register, amend call_into_lisp to load pthread_getspecific(specials) into it, and create new threaded vops for lots of special variable stuff (compiler/target/cell.lisp), and macros for thread-safe pseudo-atomic/allocation stuff (compiler/target/macros.lisp). And probably some runtime stuff too, but reading the diff should give you some clues Q5) other OSes? A5) see above: we're still using futexes Q6) where? A6) on the amd64-pthread-branch cvs tag Enjoy -dan |