きしださんの以下の記事を試してみたくなり、macにOpenJDKをインストールしてみました。
Link: Java 7の並列ライブラリをためしてみる
OpenJDKのインストール方法は以下を参考にしました。ただ、ちょっとうまく動かなかったので一部変えています。同じような現象の人には役立つ情報かと思います。
Link: OpejJDK for Mac OS X(doldukeの日記)
まず、OpenJDKの以下のページの通りに進めます。
Link: Mac OS X Port
で、「Build」を実行中にエラーが出てビルドがストップします。ここで上記のdoldukeさんの記事が役立ちます。ただ、このままでは動きません。調べてみるとidljでjavaソースを生成しているのですが、makeのたびに自動生成されて上書きされるため、せっかくfindしてnative2asciiで*.javaファイルをasciiに変換しても無駄になってしまうようです。そこでidljiについて調べてみるとkeepというオプションをつけると既に生成済みのファイルは生成しなくなることがわかりました。そこで、Makefileに以下の修正を加えます。
ファイル:/private/tmp/macosx-port/corba/make/org/omg/sources/Makefile
修正前(96行目): $(IDLJ) -td "$(GENSRCDIR)" -i (略)
修正後(96行目): $(IDLJ) -keep -td "$(GENSRCDIR)" -i (略)
このあと、doldukeさんの記事の通り、以下のコマンドを実行します。doldukeさんはUTF8とされていましたが、javaファイルを見るとSJISのようでしたのでSJISに変更しています。
find /private/tmp/macosx-port/build/macosx-universal/corba/gensrc/ -name '*.java' | while read p; do native2ascii -encoding SJIS $p > tmpj; mv tmpj $p; done
この修正を加えたあと、/private/tmp/macosx-port/に移動して、makeを実行します。私はmacbook proですがかなりビルドには時間がかかりました(計測していませんが30分くらいはかかったと思います)。
ビルドが成功すれば、あとはまたOpenJDKのページに戻って、手順通りに進めます。とりあえず「Run」まで実行すれば自分のプログラムをコンパイル&実行できるようになります。
で、やっと準備ができたので、きしださんのページに戻りビルド&実行してみました。結果は以下の通りです。あれれ?シーケンシャルの方が早いや。。。なんでかな?javacもjavaも1.7が動いているようだけど。
processors:2
24741201
24741201
seq:647 para:1491 diff:0.433937
とりあえずあとで調べよう。。。という時間があるかはわからないけど。
■2011/2/22追記
試しに同じmacbook pro上のvmware(winxp)にjdk7を入れて同じソースをコンパイル&実行してみた。その結果は以下の通り。一応、並列処理できているようだね。。。mac版はまだ並列処理部が実装されていないのかな?
processors:2
24756156
24756156
seq:8313 para:5437 diff:1.528968