MPI超超入門「Hello world編」

スーパーコンピューターとかで使われる分散メモリ間のメッセージ通信APIの規格であるMPI(MessagePassingInterface)の超超入門。
これを勉強すれば複数のコンピューターを使ってちょうすげぇ計算ができるよ。

ものすごくざっくりした説明をすると

例1.「1〜10までの整数の足し算を二人で行う」
この例では、一人目が1〜5の総和を求め、二人目が6〜10の総和を求め、最後に二人が求めた結果を足せば答えになる。
ここで問題となるのは、「二人が求めた結果を足す」ためには、どちらかの結果をどちらかに伝えなければならない。

例2.「1〜10までの整数について、それぞれの数の一つ前と一つ後の数との和を求める作業を、二人で行う」
分かりにくいので具体的にいうと、「1」については一つ前の数が0で、一つ後の数が2なので、1に対応する答えは0+1+2=3となる。
この例でも、一人目が1〜5について求め、二人目が6〜10について求めるとする。
ここで問題となるのは、一人目が5について答えを求める時、5の一つ後の数である6を、二人目からもらわねばならないことである。
逆に、二人目が6について答えを求める時、6の一つ前の数である5を、一人目からもらわねばならないことである。*1

これらの問題を解決するために用意されるのがMPIであり、C言語にもFORTRANにも実装できる大変嬉し恥ずかしいAPIとなっている。

では記念すべき第一回として、お約束通り「Hello world」をしてみたいと思う。*2

FORTRANプログラムの例

program main
include 'mpif.h'
write(*,*)'Hello MPI'
stop
end

コンパイルと実行の例1(某工業大学スパコンの場合)

mpif90 hello.f -o hello.out -mcmodel=medium ←コンパイラはpgfではなくmpifを使う
mpirun -n 4 hello.out ←実行時オプションとして-nをつける。4の場合は4並列で実行される
Hello world ←4並列で実行したので、結果が4つ出てくる
Hello world
Hello world
Hello world

コンパイルの例2(某帝国大学スパコンの場合)
※某帝国大学インタラクティブでの実行ができないため実行は省略します

mpif90 -Oss -noparallel hello.f -o hello.out


C言語プログラムの例

#include
int main(int argc, char **argv)
{
printf("Hello world \n");
}

コンパイルと実行の例1(某工業大学スパコンの場合)

mpicc hello.c -o hello.exe -mcmodel=medium ←コンパイラgccではなくmpiccを使う
mpirun -n 4 hello.exe
Hello world
Hello world
Hello world
Hello world

コンパイルの例2(某帝国大学スパコンの場合)
※某帝国大学インタラクティブでの実行ができないため実行は省略します

mpicc -Os -noparallel hello.c -o hello.exe

これらの例は、コンパイラをMPIのものに変更したことによって「無理やりMPI化」したものであってプログラム自体は通常のソースコードのままである。
これではあんまり意味がないので、次回は「真にMPI的なHello world」を紹介したいと思う。*3

つづく*4

*1:あくまでたとえ話なので「そんなこともらわなくても分かるじゃん!」というツッコミは却下される

*2:なお、コンパイルオプションや実行時オプションについては環境に依存しますのでお使いのスーパーコンピュータの管理者にお問い合わせください。

*3:ただし今回の記事についても「MPI時のコンパイル方法と実行方法」については意味はある

*4:かどうかは知らん

満月

今月はいわゆるブルームーンらしいっすね。

Wikipediaによると

本来、大気中の塵の影響により月が青く見える現象をブルームーンと呼んでいたが、1946年に天文雑誌「スカイ&テレスコープ」の誤解により、ひと月のうちに満月が2回あることをブルームーンと呼ぶようになった[要出典]。
ブルームーン - Wikipedia

らしい。

で、撮影したのがこちら。

Xacti HD2000で撮影した写真


α330で撮影した写真

…あまり画質が変わらなくてな…αには新品のレンズを与えるべきなのだろうか。それともまだまだ修行が足りんってことだろうか。

おひさしぶりぶり

ブログをサボって丁度1年1ヶ月ですね。私は元気です。

  • カメラの話


これは前からあるXacti HD2000
6月に水濡れしてメニューボタンが壊れてしまったので、秋葉原LUMIX & Let'snote修理工房に修理に出した。修理代は約9500円で、ボタンのユニットごと交換されてきた。
Xactiは好きなムービーカムのシリーズだったのだが、SANYOがパナに吸収されてしまって後継機が出ないかと思うと残念である。


実家からもらってきたMINOLTA α7xi
大型の液晶モニターが搭載されたデジカメが普通となった今、のっぺりしたフイルムカメラの背面を見るとなんか違和感がある。

7xi用のメモリーカード。シーンごとプリセットが記憶されている。多重露出とかは使うかも知れんけど、スポーツとかは使わんだろうなぁ。
デジカメである程度、写真の勉強できたらフイルムカメラも使っていきたい。


この話の本題。SONY α330
秋葉原ソフマップで14000円。レンズはMINOLTA時代の35-105mmと100-300mmを梅田のソフマップでそれぞれ2500円と3500円で買ってきた。
コンデジよりもシャッタースピードが速いことや、マニュアル操作がぱぱっとできるのですごく捗っているが、どうにも画質が劣る気がする。やはりレンズが古すぎるのがいけないのだろうか。

ここ最近のまとめ

東工大鳥人間参加プロジェクトである「マイスター」による人力飛行機の飛行試験があると、マイスターのOBで研究室の先輩であるMKT氏からお誘いがあったため、さんざん悩んだ挙句、当日午前2時に下宿を出発。バイクで国道ぶっ飛ばすこと約3時間、5時ごろにホンダエアポートに到着し、6時からの試験飛行に間に合った。

美しいっすね。職人によるスタイロフォーム削り芸ですね。(伏線

和光市にある陸上自衛隊広報センター・通称「りっくんランド」に、弟とI氏と3人で行ってきた。
みんな戦車とか好きだろう?そうだろう?俺は好きです。

美しいっすね。機能美の極致ですね。材料力学の独壇場ですね。

羽田空港ボーイング787が来ると聞いて、当日午前2時に下宿を出発。しかもMKT氏に、羽田に行くことがツイッターで筒抜けだったため、東工大前で待ち合わせてバイクに二人乗りして羽田まで行った。(MKT氏のバイクはこのとき壊れていたため)このときが二人乗り初挑戦だったので、緊張のあまりバイクの右ペダルと左ペダルを間違えるというギャグが炸裂。何言ってるのか分からないだろうが、俺も分からない。MKT氏はこの日記を見ていたら速やかにバイクを直してください(笑
とにかくそんなこんなで羽田に到着するも、事前の調査不足が仇となって、着陸滑走路を間違えるという失態を犯したため、「なんとかボーイング787らしいっぽい写真」しか撮影できず。今後の課題を残す結果となった。

美しいっすね。機能美の極致ですね。航空力学の独壇場ですね。

  • 某月某日 東京都内にて

小学校時代からの友人である某海曹が防衛省で研修受けに来ていると連絡があったため、都内をぶらぶらして一緒に飲んできた。

東京タワーのてっぺんは、先の震災の影響で曲がったままだった。

  • 某月某日 京都の山奥にて

京都工芸繊維大学自動車部関連で関西に戻る。帰った当日に自動車部のOB懇親会、翌日はフェリアスと工繊大と京大のジョイントラリーのオフィシャルに借り出され、久々に車の運転をしまくりの2日間だった。久々の運転で酷道を暴走とか。(帰りが某S根さんの後ろを着いていったため。もちろん本人にしてみれば遅すぎて「もっさいわ!」ってなもんだったろうけど、俺にとってはかなりしんどかった)スパシオぶつけずに済んでよかった。
ちなみにこの一連のイベントの前後にピロリッシュに合っているという。
\ピッロリーン/

果たしてサミットまでに完成するんか、これ?

ビデオカード買った

GeForceGTX480買っちまったぜ。前回の日記で「Core2とFermiの組み合わせはバランスが悪い」とか言ったのにもかかわらず。これが「舌の根の乾かぬうちに」というやつか。とりあえず簡単にベンチマークしてみたが、異次元の速さだ。通常の3倍どころの騒ぎじゃねぇ。そして異次元の熱さだ。ケース全体のエアフローを再考せねばならぬ、っていうかケース自体交換せねばならぬ感じ。普通に取り付けたら熱暴走で停止したので、とりあえず今はサイドパネル開放してミニ扇風機回してごまかしてる。前の研究室の時はポン付けでそのまま動いたんだが、あれはケースがいいとこの子だったからなぁ。さすがAntec、伊達に高価じゃないな。
まぁそれはともかく。現在うちの主力となってる3台のPCのうち、一番遅いPC(件のCore2DuoE6700@2.66GHzのヤツ)にFermiが刺さってるのはやっぱりバランスが悪い。メインマシンがそろそろ年1回規模のメンテナンスの時期なので、CPUをもうチョイ速いのに交換するついでにこのGeForceもそっちに付けようかと思う。

ビデオカード壊れた

CUDAプログラミング用のマシンに刺してたGeForceGTS250が使い物にならなくなってきた。
もともとジャンク品だったわけで、買ってすぐに画面の表示が化ける症状が出てた(ビデオメモリーが壊れてる?)製品だが、起動直後にBIOSに入って3分ぐらい暖機運転をすることで黙らせて、かれこれ1年近く使ってきた。しかし最近はさらに症状が悪化し、この暖機運転を行ってから起動しても、30分ぐらい経つとCUDAの計算結果におかしなことになったり、画面にゴミが出たり色がおかしくなって最悪フリーズしたりすることが多くなってきた。
単に時の流れによって性能が陳腐化しただけであったら他のPCにまわしたりも出来るんだが、壊れているものはどうしようもない。いずれにせよ、このままではテレビ番組のエンコードができないだけでなく、CUDAプログラミングができない。これは困った。というわけで次に仕入れるビデオカードの選定を行いたい。
マシンはCore2DuoE6700@2.66GHz、DDR2-800-4GB、nForce680iLT SLIマザーである。理想を言えばFermiアーキテクチャー、それもGeForceGTX580を積みたいわけであるが、そんな資金は無いし、Core2とFermiを組み合わせてもバランスが悪いだけでFermiのパフォーマンスがフルに発揮できないことが、前の研究室で組んだマシンで分かった(CUDAプログラミングならビデオカードの性能のみが処理速度を決定する、という根拠によってビデオカードのみ当時の最新型に換装されたわけであったが、システム全体のさまざまなバススピードを考えれば、やはりNehalem世代と組み合わせるのが妥当であったと言える)
現在手元にあるのがGeForceGTS8800とGeForceGTS250(9800GTX+のリネーム品)であることを考えれば、Teslaアーキテクチャー世代の、CUDAコアが128個以上あるものを、それもSLIで搭載したいと考えるのが人情と言うもの。
となると次のターゲットはGeForceGTX260以上か。Fermiでもローエンドなら許される気がする。ダークホースでRADEON積んでOpenCLってのはどうか?ダメか。

主にネットワークの話


東京に越してからの使用状況に合わせてネットワーク機器の編成を更新した。
今のところ自宅のルーターとして使っている写真右のPLANEX・MZK-W300NH2だが、結論から言えばクソだ。価格.comあたりでも酷評されてるし、年末年始あたりには日本橋のジャンク屋で未使用品と思われる当品がワゴンに大量に積まれていたところを見ると、メーカーも見切りをつけたんではないかと邪推している。クソ扱いされる理由は動作が不安定であることに尽きるわけだが、これに関しては廃熱設計の拙さが原因と思われる。ケースを開けて確認したが、CPUが異常に発熱しているにもかかわらず、ヒートシンクが付いていなかった。今のところ、Pentium4時代のチップセットヒートシンク+高負荷時にはミニ扇風機ONで何とか安定して運用することに成功している。ファームウェアに関しても時代に見合った最低限の機能は搭載しているように思えるので、廃熱の問題さえクリアすればあるいは低価格帯の定番としての地位を得られていたのではないかなどと考えてしまうが、ツメの甘さで人気を落とすPLANEXのことを思えばそれもかなわぬ夢なのか、などと。
次に、写真中央のPLANEX・BLW-04FMGであるが、かなり前のある夏、熱ダレして無線LANがお亡くなりとなり、有線ルーターとして使われていたものである。マンションのルーターは上記MZK-W300NH2に置き換えられ、実家のルーターはBUFFALO・WHR-G301Nに置き換えられたため、ここ最近はニート状態であったが、研究室で2台以上のPCを使うために先週復帰させた。前の研究室ではルーターの設定を変え放題・LANケーブル敷設し放題だったのだが、今の研究室では一人一つのIPアドレスがきっちり割り当てられているため、見かけ上一つのIPアドレスでやりくりするにはルーターが必要となった次第である。問題は、研究室内でのファイルのやり取りに使うIP MESSENGERのためのポート開放が未だにできていないことであるが、まぁいじり倒せばそのうち何とかなるのであろうと楽観視している。
最後に、写真左のBUFFALO・WLA-G54である。上記BLW-04FMGの無線LAN部分がお亡くなりとなった際に、代替無線LAN環境として急遽導入されたAPであり、ルーターではないため、ややつぶしが利かない。これも最近はニート状態であり、こいつに関してはもう活躍することはないであろうと思っていたが、そうでもなかった。今のマンションにはゲーム機としてPS3XBOX360があるのだが、ルーターからは離れているため、インターネット接続するには無線LANか、長いLANケーブルが必要になる。PS3無線LAN内蔵であるためこれで対処できたが、問題はXBOX360である。LANケーブルはドアで断線するのが怖いので敷きたくない、かといって専用無線LANアダプタは未だに5000円以上するので買うのがばかばかしい。ここで考えるのが、APをクライアントモードで使って、無線LANを有線LANにコンバートする方法である。幸い、去年WLA-G54に非純正ファームウェアーであるDD-WRTを導入していたため、柔軟な運用が可能な仕様となっている。早速今夜やってみたのだが、久々にいじったため、APのアドレスが分からず、1時間いじり倒して漸く設定画面にたどり着けたかと思ったら、自分で設定したIDとパスワードを忘れて、さらに30分の苦闘を強いられるというわれながら恥ずかしい罠に嵌ってしまった。まぁ最終的に設定が完了し、XOBX360も無事ネットに繋がった。久々にアップデートしたらKINECTを前面に押し出したダッシュボードデザインとなっており、とても物欲が刺激されましたとさ。おしまい。