All code currently has to be built using the -smp switch, including the libraries. If you downloaded a binary snapshot, then you already have the required libraries. If you build GHC from source, you need to add

GhcLibWays += s

to the file mk/build.mk in the build tree before building.

Compile your program with -smp

Run the program with +RTS -N2 to use 2 threads, for example. You should use a -N value equal to the number of CPU cores on your machine (not including Hyper-threading cores).

Concurrent threads (forkIO and forkOS) will run in parallel, and you can also use the par combinator and Strategies from the Control.Parallel.Strategies module to create parallelism.

Use +RTS -sstderr for timing stats.

1.4 Links to related work on parallel and distributed Haskell (many based on GHC)