doSMPをインストールして、それで並列計算してみた

ちょっと前に「foreach+doSNOWパッケージを使って、並列処理をやってみた - My Life as a Mock Quant」という記事を書いてdoSNOWパッケージを使ったRによる並列化計算を紹介したけどdoSMPパッケージなる並列化パッケージもあるらしい。というわけで早速試す。

doSMPパッケージのSMPは”symmetric multicore processing”の略だそうで、Linux/MacユーザーにはdoMCパッケージという似たようなパッケージが既に提供されているのだけれど、windowsユーザーはdoMCパッケージを使用できないので*1、それに代わるもののイメージ。


インストールは毎度おなじみのinstall.packages関数ではなくて、

にあるZIPをダウンロードしてRをインストールしてあるlibraryフォルダにそのまま解凍すればOK.
私は以前にforeachパッケージ等はインストールしていたのでrevoIPCとdoSMPフォルダのみコピーした。参考リンクによるとRのバージョンが2.11.0だと若干不具合が出る模様。

では、doSNOWの記事の時と同じ例題を解いてみる。

> library(foreach)
> N <- 10^4
> library(doSMP)
> registerDoSMP(startWorkers(2))
> system.time(foreach(i = 1:N,.combine = "cbind") %dopar% {
+    sum(rnorm(N))
+ })
   ユーザ   システム       経過  
     16.64       0.10      32.56 
> 

前回の記事の結果と比較するとdoSMPパッケージの方が若干速い模様。なぜ計算速度に差が出るのかは3年B組バタデ先生が「doSNOWとdoSMPの比較(考察なし) - 盆栽日記」という記事で解説して下さるらしいので楽しみに待っている。http://www.revolutionanalytics.com/subscriptions/docs/RevolutionREnterprise4.0/parRman.pdf」のP22に

The doNWS and doSNOW packages are parallel backends for clusters of workstations; they can
be used on a single multi-core or multi-processor computer, but they are not optimized for such
use.
The doSMP and doMC packages are parallel backends for foreach that are intended for parallel processing on a single computer with multiple cores or processors. The doSMP package is
available on all platforms, while doMC, which depends on the multicore packages, is currently
available only on Mac and Linux systems.<<

と書いてあるように、doSNOWは最適化されてない一方、doSMPパッケージはマルチコアを意図して作られたものだからっぽい。この情報を教えてくれたid:dichikaさんに感謝感謝。


参考

*1:Library内部でUNIXシステムコールがあるためらしい