MatsuLab. Lecture Note/sougouenshu2006 TSUBAMEを使って並列プログラミングをしよう †担当:滝澤<takizawa@matsulab.is.titech.ac.jp> 目次 †スケジュール †進捗によって変わると思います。
「予備日」は研究室に来なくてもよい。担当TAは研究室に在室するので質問等あったら訪ねてください。また、この日に実習室で課題を解くのであれば、必要ならサポートに行きます。 講義内容 †Cの基礎課題 †行列とベクトルの掛け算を行うプログラムを書きなさい。行列のサイズ、ベクトルのサイズはプログラムの引数から取得し、実行時に必要なメモリを確保すること。 また、行列、ベクトルの要素を生成するときに、乱数を用いてランダムな値で初期化するために、プログラムの引数には乱数のシードも取ること。 例えば、以下のように3つの引数を取ればよい。 $ ./serial 乱数シード 行列の行数 行列の列数(ベクトルの要素数) 行列、ベクトルの要素の生成ルーチンをまとめたライブラリのソースを松岡研PCクラスタ上の次の場所に置いた。 /home/takizawa/array_gen.h /home/takizawa/array_gen.c このファイル内には以下の1つの関数が用意されている。
以下のように使うこと。 #include "array_gen.h" int seed, *matrix, matrix_len; ・・・ array_gen_init(seed); matrix = (int *)malloc(・・・); create_random_array(matrix, matrix_len); ・・・ free(matrix); メインプログラムを「serial.c」とした場合、次のようにコンパイルすれば、実行ファイル「serial」が出来上がる。 $ gcc -c array_gen.c $ gcc -c -Wall serial.c $ gcc -o serial serial.o array_gen.o $ rm serial.o array_gen.o <- 必要ないなら削除してかまわない ヒント&注意
MPIの基礎課題 †「Cの基礎課題」のプログラムをMPIを使って並列化する。 このとき、行列の分割は、「全てのプロセスが同じ数の要素を処理する」ように分割するのでかまわない。 すなわち、16x16行列が与えられ、2プロセスで計算する場合には、各プロセスは行列中の8x16個の要素の計算を行う。4プロセスで計算する場合には4x16個、8プロセスで計算する場合には2x16個の要素を計算する。 この場合、行列の要素数は使用プロセス数で割り切れる必要がある。 余裕があれば、任意のプロセス数で処理できるようにプログラムを修正すること(自由)。 メインプログラムを「mpi.c」とした場合、次のようにコンパイルすれば、実行ファイル「mpi」が出来上がる。 $ gcc -c array_gen.c $ mpicc -c -Wall mpi.c $ mpicc -o mpi mpi.o array_gen.o $ rm mpi.o array_gen.o <- 必要ないなら削除してかまわない 以下のように実行できるようにすること。 $ mpirun -np 4 -machinefile machines -nolocal ./mpi 乱数シード 行列の行数 行列の列数 ヒント&注意
スパコンコンテスト課題 †課題を解くために必要なファイルをPrestoIIIの以下の場所に置いた。 各自cpコマンドを用いて自分のホームディレクトリにコピーすること。 /home/takizawa/sougouenshu/ このディレクトリには以下のファイルが置かれている。
progrule.htmlとslide.pptはPrestoIII上では閲覧できない。 scpコマンドを用いてコピーすること(下記のコマンドをMAC上で実行)。 $ scp eugs0X@nimbus.titech.hpcc.jp:/home/takizawa/sougouenshu/FILE_NAME . コンパイル方法 $ mpicc -c sc06.c $ mpicc -c YOUR_FILE.c $ mpicc -o scon sc06.o YOUR_FILE.o ヒント&注意
課題の進め方 †その1
その2
松岡研PCクラスタ PrestoIII の使い方 †
TSUBAMEの使い方 †TSUBAMEでは「バッチキューイングシステム」が使われている。 バッチキューイングシステムでは、ユーザはジョブ(今回の場合はMPIアプリケーション)を「キュー」と呼ばれる計算機の集合に投げる。 バッチキューイングシステムは、キュー内の計算機に空きができ、ジョブの要求を満たす数の計算機が確保できたらジョブを実行する。 ログイン
プログラムのコンパイル
インタラクティブノード上でのプログラムの実行
バッチキューイングシステムを用いたプログラムの実行
参考文献(URL) †
|