Windows版開発 その3
だいぶできたような気がする。
pards_finalize()で子プロセスが終了するのを待たない問題は、セマフォを使って解決。
SPMD終了時に子プロセスの終了を待つのも、バリアをかけてからexitすることで解決。UNIX版でもこの実装でよかったような気もするが。
bzip2のmakeは、最初namkeとかclのパスをどう通すんだろうとか悩んだんだけど、(VISTAの場合)「すべてのプログラム」からVisual Studio 2005 → Visual Studio Tools → Visual Studio 2005コマンドプロンプトを起動すればパスが通ったコマンドプロンプトが起動するので解決。
素のbzip2はnmake -f makefile.mscで一発でmake成功。
並列版も必要なファイルをディレクトリにコピーしてmakefileを少し修正するだけで、ほぼ一発でmake成功。一応、並列に動いている様子。ただ、本当は圧縮前のファイルを圧縮後に削除するんだけど、それがPermission deniedで失敗する。なぜだ? この部分は逐次版と同じはずなんだが…
速度の方は、9MBファイルほどのファイルをMacBookで圧縮した場合で、逐次版は4.3秒ほど、並列版は2.7秒ほど。圧縮したファイルを元に戻して一致しているようだから、ファイル削除に失敗する以外は正しく動いているんだろう、きっと。
あとはファイルを整理して公開できる状態にすることかなぁ。
Windows版開発中 その2
SyncList, SyncQueue, WorkPool, Mergerについてサンプルで動作を確認。
途中、なんだか知らないけど時々実行終了時にWindowsが不正終了?を知らせるというバグに悩まされる。これは、_exit()が解放しようとしたメモリが子プロセスからはアクセスできなかったというもの。ExitProcess()に変更してもダメで、結局ネイティブAPIのZwTerminateProcessを呼び出すことで解決。
そういえば、不正終了時に「Microsoftに知らせますか」云々のメッセージが出るけど、そこに示してあるファイルにクラッシュダンプがあるのね。デバッガで開くと、落ちた所までのコールツリーが見えるので便利。ってWindowsで開発している人には常識なんだろうなぁ。
ちょっと微妙な仕様として、UNIX版だとpards_finalize()で子プロセスが終了するのを待っていたんだけど、Windows版だと待っていない。
というか、Windowsにはwaitが無いので待てないという。どうしようかなぁ。
ついでに、SPMDサポートも同様の問題がある(SPMD終了時に子プロセスの終了を待つ)。ん〜、どうにかしないと駄目か。
N-Queenも試して、とりあえず2CPUで速くなることを確認。bzip2で試したいんだけど、ちょっと手間がかかるかな。Windowsでコンパイルするところからだし。
とりあえず、懸案が進んで有意義な連休でした(^^
Windows版開発中
PARDSのWindows版、半年前位にできそうかな、という感触までつかんでいたんだけど、再開。
連休中にコーディングして、簡単なサンプルが動くところまではこぎつけた。
まぁ、原理的にUNIX版のサブセットにしかできないんだけど(シグナルが使えないとかで)。
途中、ロックの論理的なミスで動かないバグがあったんだが、ネイティブAPIでフォークしたからセマフォが正しく動いていないのかなぁとか見当違いのところを突っつき回してすげー苦労した。まぁ勉強になったからいいといえばいいんだが。
Windowsのセマフォは、ハンドルをオープンしているプロセスが全部終了すると、カーネルから削除される仕様になっている(UNIXのは、明示的に消去しないと消えない)。それはそれでいいんだけど、セマフォを作って、その名前だけを他のプロセスに渡し、そのまま作成したプロセスが終了したりすると、せっかく作ったセマフォが使われる前に消えてしまったりする。というのを避けるために、セマフォを作ったら、専用に作ったプロセスにそのセマフォをオープンしっぱなしにしてもらうことにした。ちとダサいがまぁいいだろう。
前にも書いたけど、fork()はネイティブAPIで実現。Win32サブシステムへの接続は結局できなかったので、SPAWNした関数からは、Win32 APIの呼び出しは制限される。ちょっと試した感じだと、ファイルI/O位はまぁ動いているみたい。標準入出力は駄目。普通のプロセス生成やスレッド生成も駄目だろうなぁ。
RPMパッケージがupdatesに
入ったそうです:続 PARDSのRPMパッケージ - MasaHero’s blog
「Fedora 7以降のFedoraユーザーは"yum install pards pards-devel"でインストールすることが出来る」とのこと。
素晴らしい。感激です。
どうもありがとうございました > MasaHero様
Fedora へのリクエスト
昨日のRPM化に続き、「Fedora ProjectのリリースにPARDSを含めてもらえるようリクエストを出」していただいたとのこと:PARDSのRPMパッケージ - MasaHero’s blog。ありがたや。
こちらの記事もあわせてご覧下さい。
ありがとうございます。