
Cristian Perfumo wrote:
Some days ago I sent an email to the list asking about the reason why I couldn't run my programs with the "-Nx" RTS option even if I compiled them with -threaded. AH! by the way, the architecture is ia64 (Itanium). Today I realized that when I ./configure, a preprocessor variable called "NOSMP" is defined and it disallows the multiple OS threads (the -Nx option). Looking a bit deeper I figured out that there's no Itanium version for the functions xchg (exchange), cas (compare-and-swap) and write_barrier in the header file SMP.h (includes/SMP.h) so there's no way that the holy -N option is available. My question is: is it enough to implement xchg, cas and write_barrier for ia64 to make multiple OSthreads available on ia64? If not, what else should be implemented/changed?
Yes, that should be enough. The main concern is that on architectures that don't have strong memory ordering, that the thunk update sequence is safe. See section 3.3: http://www.haskell.org/~simonmar/papers/multiproc.pdf At the moment the update code contains a memory barrier, which compiles to nothing on x86/x86_64 (see SMP.h:write_barrier()). You should check that this doesn't impose a significant performance penalty on ia64: try one of the benchmarks that does a lot of updates (e.g. nofib/imaginary/exp3_8) with and without -threaded. Cheers, Simon