[[MatsuLab. Lecture Note/sougouenshu2007/round2]]

* 第1回目 [#u08f69df]
** 課題 [#t8204c96]
*** その1 [#odcae55d]
配布資料の"A User's Guide to MPI" ( ftp://math.usfca.edu/pub/MPI/mpi.guide.ps )を読む。また、2章に書かれているプログラムを実際にプロセス数を変化させながら動かしてみる。
実行方法は、プログラムファイル名をgreetings.cとして、以下のとおり行う。
 $mpicc -o greetings greetings.c
 $mpirun -np 4 -machinefile machines greetings
1行目では、プログラムファイル(greetings.c)からコンパイルとリンクを行い、greetingsという名前のexecutableを生成している。-oは出力ファイル名を指定するオプション。
2行目では,1行目で生成されたexcutableを実行している。-npがプロセス数を指定するオプションで、-machinefileは実行マシンを指定するオプション。ファイル(ここではmachines)に記述された実行マシンが選択される。以下はmachinesファイルの例。~
 pad050
 pad051
 pad052

*** その2 [#f22ab2be]
以下の指示に従い「COLOR(BLUE){行列とベクトル積を行なうプログラム}」を実装し、実行すること。シングルプロセッサ用プログラムを用意してあるので、それを参考にして良い。
-行列、ベクトルデータの生成は1つのプロセス上で行い、そのプロセスからMPI通信関数を呼び出して他のプロセスに送ること
-計算終了後には1つのプロセスにデータを集約すること
-行数、列数、使用プロセス数をさまざまに変化させて実行すること
-一対一通信のMPI_Send、MPI_Recvだけで実装できるが、集団通信のMPI_Bcast、MPI_Scatter、MPI_Gatherなどを使って実装すると良い
--なお、任意の数のプロセスに対応するにはMPI_Scatter、MPI_Gatherの変わりに、MPI_Scatterv、MPI_Gathervを使うことになる

シングルプロセッサ用プログラムのコンパイル&実行方法。
 $ gcc -c vector.c    <- vector.oが既に生成されていれば実行しなくても良い
 $ gcc -c mul_matrix.c
 $ gcc -o mul_matrix mul_matrix.o vector.o
 $ ./mul_matrix    <- 実行
MPIプログラムのコンパイル方法。mpi_mm.cは各自が作成するプログラム。
 $ gcc -c vector.c    <- vector.oが既に生成されていれば実行しなくても良い
 $ mpicc -c mpi_mm.c
 $ mpicc -o mpi_mm mpi_mm.o vector.o
 $ mpirun -np 4 -machinefile machines ./mpi_mm   <- 実行

* 課題の進め方 [#s7ceb180]
その1
-演習室MACでプログラムを編集
-scpコマンドでプログラムをPrestoIIIクラスタに転送(リモートコピー)
-sshコマンドでPrestoIIIにログイン
-PrestoIII上でプログラムをコンパイル&実行

その2
-sshコマンドでPrestoIIIにログイン
-PrestoIII上でviやemacs( -nw)などでプログラムを編集、コンパイル&実行
-PrestoIII上でviやemacs( -nw)などでプログラムを編集、コンパイル&

* 参考資料 [#d9a15bff]
+[[MPIドキュメント集:http://www.mpi-forum.org/docs/docs.html]]
+[[MPIによる並列プログラミングの基礎(PDF):http://mikilab.doshisha.ac.jp/dia/smpp/cluster2000/PDF/chapter02.pdf]]
--同志社大の先生が書かれた、非常に詳しい日本語資料
+[[MPICH:http://www-unix.mcs.anl.gov/mpi/mpich1/]]
--MPIの一実装。今回はこのMPIの実装を用いる。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS