Haskellによる並列・並行プログラミング読み進む内に、普通のシングルスレッドプログラムを簡単にマルチスレッドにする方法が書いてあった。

import Control.Parallel.Sterategies

main = (print.f) [9999800..1000000]

f xs = map g xs `using` parList rseq

g n = sum [1..n]

上の通り、シングルスレッドプログラムに
import~と、`using`~を追加するだけ。

コンパイルと実行の時にもコマンド引数が必要で、コンパイルの時、

>ghc -O2 filename.hs -threaded

と言うふうに速さ重視の最適化とスレッド対応を明記。

実行時にはスレッド数をNnの形で指定する。(ここでは2スレッドを指定)

./filename +RTS -N2

普通のプログラミング言語だと、シングルスレッドとマルチスレッドでは似ても似付かないコードになるから、これには感動した。
(2スレッドと4スレッドでもコードが違う事がまま有る中、これは本当に感動)

Haskellマジお勧め。