並列計算機ってなんでがしょ

数値計算の結果を早く出すため、及び自分の興味を満たすため。
並列計算機とかいうものを色々調べてみました。


並列計算機とはいっても色々な種類がある訳ですが。作ってみたいのは、いわゆるPCクラスタとかいうようなやつです。
並列計算機について、あまりに無知なので、調べてみると色々勉強になりました。
PVMとかOpenMPとかMPIとかCactusとか共有メモリ型とか分散メモリ型とかHPFとか。
こんだけ色々訳分からん単語がある、というか、並列計算に種類があるとは思いもよらなかったので、理解にものすごい時間がかかりました。
つーか、今でもまだよく分からん。


以下自分が理解したと思われること。間違っている可能性は未知数。Blogは嘘を嘘であると見抜ける人でないと使うのはむずかs(ry
・スーパーコンピュータみたいな、CPUが16個とかのってる大型計算機は、いわゆる共有メモリ型並列計算機?PCクラスタは分散メモリ型計算機にあたる?
・PVMとかMPIは、並列計算における通信方式みたいなもの?ただ、PVMは(計算をさせると言う意味での)クライアントPC全てで、PVMデーモンを起動しておく必要がある?MPIはtelnetsshのような通信及びNFSを使って分散計算をさせる。したがってこちらはデーモンは必要ない?比べてみると、MPIの方が多く使われている?Fedora2は、インスト時にPVMパッケージを入れるかどうか聞いてきたなぁ。今回はMPIを使ってみようかと思う。
ただ、後々にはHPFの方が本格的になり有望?PCクラスタで使えるのかは不明。
・Cactusは元々、一般相対論のシミュレーションをするためのソフト?プログラムを自動的に並列実行する、というような目的だけでも使用可能?でも、元々あるプログラムの書き換え・分散化する変数の割り当てみたいなものをするのがめんどくさそうなのであきらめた。パラメータファイルとかなんじゃらほい?イマイチ実行の仕方が分からん。自分が使う数値計算プログラムは比較的構造が単純なので、直接MPIで組んだ方が早いと思った。
OpenMPは自動並列化ツールであることは確からしい。Intel Fortran 8には少なくともOpenMPが組み込まれていて、自動並列化をしてくれるらしい。しかし、いわゆるスーパーコンピュータのような共有メモリ型計算機で、プロセスをスレッド化(並列化?)するためのソフトであるので、PCクラスタとは話が別である?
・MPIでプログラムの自動並列化ソフトは今の所見当たらない?少なくともFreeでは見当たらない?


ちなみに、自分の環境では、PCにギガビットイーサのっているのにHubが10BASETであるため、効率は落ちた。(;´д⊂)
MPI使おうと思ったので、PVMについてはさっぱり訳わかめ。デーモン使うってことは、NFSはいらないの?
つーか、MPI使うのにsshで自動ログインするのに.ssh/内のauthorized_keysにrsa.pub書き込むけど、するとこのユーザのディレクトリはog-rwxでないとダメなようなんだけど*1、それじゃユーザディレクトリ内でNFSマウントしてプログラム実行する、っていうことと矛盾しているような・・・。
普通は各計算クライアント(?)に/home/をNFSマウントして実行するから、バイナリにPATH通ってなくても./a.outみたいにできる、となるはずなのに。これじゃNFSマウントしてもクライアント側から中見れないし、実行ももちろんできなくない?
結局、/home/以外に実行可能なディレクトリ作って、PATH通して使っています。

PCクラスタ内のPCの構造が違う場合は、NFSマウントせずに同じディレクトリ構造作って、そこにプログラム持ってきてコンパイル・メインPCから実行すればいいんかな?こういう場合、PVMではどうやって解決するんだろう?


間違った点の指摘(細かい指摘はいらんですが根本的に間違っている点)があれば下さい・・・。

*1:セキュリティのため、authorized_keysファイルまでのパス全てで、og(oだけかもしれないけど)にrwxがあるとだめらしい。この点はある程度確認済み。