PARDS

N-Queens / C++ & PARDS版を高速化

Erlang版とかに比べて遅すぎると思ったので、高速化にトライ。 元々、Fleng/KLIC/Erlang版をストレートに移植したので、リストに頼りすぎたデータ構造になっていたが、普通C/C++ではもう少し配列を使うよなぁ、ということで、ワーキングエリアとして、配列を…

N-QueensをPARDSで並列化

できた。昨日のC++版N-Queensを若干変更。 変更点は、「答えリスト」だけを特別扱いして、共有メモリ上に確保。あと、答えリストの中身は配列で表現することで、共有メモリ確保のオーバヘッドを減らした。 また、やたらプロセスを生成してもオーバヘッドが増…

mmapのサポート

したものをコミット。shmget & shmatしていた所をmmapに変更しただけ。mmapはプロセス終了時に後始末しなくてもOSがunmapしてくれるから楽ね。 ちょっととまどったのが、mmapの使い方。かすかな記憶では、共有メモリとして使うときは/dev/zeroをmmapするんだ…

Version 0.3リリース

ずいぶん間があきましたが、Version 0.3をリリースしました。 SPMDサポート 並行処理サポート(値がセットされているかのチェック、タイムアウト、インタラプト、リストのマージ)と、そのGTK+を使ったサンプル Mac OS Xのサポート が変更点です。 皆様、よ…

Mac用に修正

__APPLE__で切り分けてコミット。 共有メモリサイズ設定についてドキュメントを書こうとしたら、漢字コードではまる。EUCはlessとかだと単純にはTerminalで読めないのね。んー、どうしよ。 [追記] lessが8bitを通さないということなのかな?Terminalの設定で…

Mac上でテスト

Apple Developer Connectionの無料会員になって、Xcode2.2.1をダウンロード。 …あ、今みたらバージョン古い?最新版2.4.1とかじゃん。orz[追記] 普通、XcodeはインストールDVDの中のをインストールするのね。もちろん、最新版をインストールする場合はダウン…

マニュアル書きなど

一応完了。マニュアル書きながらサンプルを試していたら見つけたバグなども修正。あと、Mergerのputにタイムアウト・インタラプト対応機能を追加したりして、もろもろコミット。 これで、一応リリース候補。少し様子を見てリリースするか。

マニュアル書き

終わらん。もう少し頑張る。

マニュアル書き

地味に進めていますが、なかなか進みません。野暮用が多くて… ゴールデンウィークになれば時間が取れそうなんですが。

マニュアル書き

SPMDサポートの部分について記述(未コミット)。 後、並行処理サポートについて記述したら、コミットして、0.3版としてリリースするかな。 英語版のマニュアル追記は後回しだけど…

Boost.Act

おとなり日記になっていた2007-03-25さんの所でこんなものを見つけたので追記。並列処理をサポートするBoostライブラリ。なんちゅーか、どういうトリックでこんなシンタックスを実現しているのやら(^^; C++は奥が深いねぇ。裏でOpenMPコンパイラを使っている…

並行処理の必要性

良く言うように、 並列処理 = 速度向上が目的。逐次で書いたプログラムが複数CPUを使って高速に動けばそれが理想 並行処理 = 「並行に動作する」ことをプログラム上で記述したい という差があるわけですが、並行処理を記述したいのはどういう場合でしょう、…

GNOME本

Amazonから"The Official GNOME 2 Developer's Guide"が届く。ざっと斜めに見た感じ、オンラインのチュートリアルとそれほど違うわけでもなさそうなんだけど。まぁでも紙で読めるのは良いか(英語だけど)。

ちょっと修正

enumの型が一般的すぎたので、"pards_"を前に付けてみた。

ちょっと修正

とコミット。GTK+用のヘルパライブラリと、サンプルプログラムについて。

ちょっとデバッグ

してコミット

pards.sourceforge.jpからのリンク

PARDSカテゴリのみにしました。あそこから飛んできて、三国志大戦がどうとか言っててもなぁ、ということで。

インタラプトの実装・コミット

をしました。 前の記事(2007-03-01 - t-arakiの日記)で、read()とかのAPIを変えずにインタラプトを実現する、とか書きましたが、それはあきらめました。orz というのは、操作が成功したかどうかが、「インタラプトがあったか」を調べるだけではわからない…

システムコール実行時にシグナルを受けた際の動作

インタラプトの実装を考えている中で、システムコール実行中でブロックしている際(例えばreadで読み出しを待っている)に、シグナルを受けるとどうなるか調べてみた。 というか、元々はシグナルを受けても、シグナルハンドラ実行後、続きを行うものだと思っ…

GCのある言語でPARDSのような処理

ができないものかちょっと考えてみる。今のPARDSの実装のようにforkを使ってしまうと、GCが起こるとメモリの全コピーが起ってしまうので効率を考えると難しそう。しかも、GCがある言語だと、たくさんメモリを確保し勝ちだし。 そう考えると、PARDSのようなセ…

インタラプト

やっぱり実装すべきかと考え中。 実装するとすると、ブロックする呼び出しを行った後、例えばpards_is_interrupted()のようなグローバルな関数を呼び出して、インタラプトされたかどうかチェックすることになりそう。 ところで、今タイムアウト付きのread()…

「Java並行処理プログラミング ―その「基盤」と「最新API」を究める―」

を購入。というか、Amazonから届く。本当にざっと見出しレベルで見た感じですが、よく書けています。 おおむねPARDSでやっていることと同じなんだけど、Javaはスレッドの「インタラプト」が可能なのね。(Javaで言う)BlockingQueue(PARDSのSyncQueue)に書…

灰耳に機種変

してきました。これで発着信不能にならずに快適(苦笑)。 新宿のWillcom Plazaが込みすぎで、多分1時間くらいかかったよ。あんまり暇なので、ノートPCでプログラミング(^^; PARDSのSMPD機能使って、行列乗算プログラムを書いてみたりして。

GTK関係をチェックイン

先日作成した、GTK関係のサポートライブラリ、およびサンプルプログラムのファイルを整理して(あとちょっとデバッグして)チェックイン。最新tarファイルはこちらから:http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/pards/pards.tar.gz?view=tar。サンプ…

GUIへの応用

PARDSの並行処理サポート機能を使って、テストとしてごく簡単なGTK+プログラムを書いてみた。ポイントは、SPAWNしたプロセスの出力をUIにどう反映するかの部分。SPAWNしたプロセスが例えばSyncListに出力を出していくとして、受け取り側でread()を実行すると…

WorkPoolの仕様

WorkPoolとMergerの機能は似ています。WorkPoolはリストからプロセスが仕事を非決定的な順序で取り出します。WorkPoolはプロセスがリストにセルを非決定的な順序で追加します。実際、両者の実装は入出力が異なるだけで、非常に似ています。しかし、WorkPool…

ファイルのコミット

書きためていた変更をコミット。Merger系とtime out系の操作を付加したSync, SyncList, SyncQueueなど。 それから、WorkPoolに「スタック上に確保すると動作しない」というバグが発覚したので修整。ちょっと機能が増えてきたので、テストスイートでも作るべ…

System V IPCのセマフォ・共有メモリの使い方

最近直接使わないので、(マニュアルを斜めに読んだだけではわかりにくい部分について)憶えているうちにメモ。 セマフォ: semgetで作成。第1引数の"key"は、ftokでファイル名(パス)から作成するのじゃ、とか書いてあることがあるが、気にせずIPC_PRIVATE…

WorkPoolのAPI変更

をしようかどうか考え中。といっても大したことは無くて、deleteする時のインタフェースだけですが。 これまでは、WorkPool型変数をdeleteする際は、その変数を参照しているworkerがrelease()を実行することで、リファレンスカウントを減らし、deleteはそれ…

Mergerの実装

複数のリストを1本のリストにマージする仕組みを実装。リストのセルに要求が入っているとして、受け手は要求を待ってブロックする。要求を出す側はそれぞれ自分のリストに要求を突っ込んでいくと、受け手側にはそれらがマージされて渡される。という感じ。正…