330 likes | 2.62k Views
卒論中間発表. 1G01P0467 酒井大輔. テーマ. 正確に解くことの難しい最適化問題についての(並列化)アルゴリズム. やったこと. folon4 に ocamlmpi をインストール( score では失敗?) 巡回セールスマン問題を hopfield 型のニューラルネットで解くプログラムを ml と c で逐次版と並列版を実装。その実行速度のデータをとった. やってないこと. アルゴリズムの精度評価 他のアルゴリズムとの比較(ボルツマンマシン、遺伝アルゴリズム) 巡回セールスマン問題以外の問題への適用. ocamlmpi の記述性.
E N D
卒論中間発表 1G01P0467 酒井大輔
テーマ • 正確に解くことの難しい最適化問題についての(並列化)アルゴリズム
やったこと • folon4にocamlmpiをインストール(scoreでは失敗?) • 巡回セールスマン問題をhopfield型のニューラルネットで解くプログラムをmlとcで逐次版と並列版を実装。その実行速度のデータをとった
やってないこと • アルゴリズムの精度評価 • 他のアルゴリズムとの比較(ボルツマンマシン、遺伝アルゴリズム) • 巡回セールスマン問題以外の問題への適用
ocamlmpiの記述性 (* mpi_test1.ml *) open Mpi let size = comm_size comm_world let myrank = comm_rank comm_world let _ = if myrank=0 then send "Hello,World" 1 0 comm_world; if myrank=1 then print_endline (receive 0 0 comm_world)
/* mpi_test1.c */ #include <stdio.h> #include <string.h> #include <mpi.h> int main(int argc, char **argv){ int myid, numprocs; MPI_Status status; char msg[20]; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); if(myid == 0){ strcpy(msg, "Hello,World"); MPI_Send(msg, 20, MPI_CHAR, 1, 0, MPI_COMM_WORLD); } else if (myid == 1){ MPI_Recv(msg, 20, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); printf("%s\n", msg); fflush(stdout); } MPI_Finalize(); return 0; }
hopfieldのアルゴリズムの説明 • 1:状態を更新 • 2:エネルギーを計算 • 3:更新前のエネルギーと比較して、その差が一定以下ならば終了
hopfieldのデモ • 参考文献1のサンプルプログラムのocaml版 • folon4上の/home/sakai/study/sub1/folon4にあるhopfield_demo.ml • ./hopfield_demo 10 testdata1 で実行
hopfieldのアルゴリズムにおけるデータ依存性 未更新 更新済み
hopfieldのアルゴリズムにおけるデータ依存性 未更新 更新済み
hopfieldのアルゴリズムの単純な並列化 • 単純に並列化するとエネルギーがループを起こし、収束しない • パラメーターを変更するとうまくいく? • しかし、プロセッサ数を変えるとパラメータも変更しなくてはいけない
ocamlとcの実行速度比較 • コンパイルはocamloptとmpiccのO2オプションを使った。 • MPIライブラリはscore-mpichはocamlmpiが安定して動作せず、またuedalab以下にあるmpichはバージョンアップで動かなくなっていたので、ホームディレクトリ以下にmpich-1.2.6をインストールし、これを用いた。 • 計測に使ったプログラムはhopfieldのエネルギーを求める部分。
逐次版 • MPIを使っていないプログラム • 並列版のプログラムもそうだが、グラフには3回測定したものの平均値を用いている • 逐次版でも並列版でも一度のプログラムでエネルギーは30回ずつ求めている
N=一定 • N(要素数)を一定にして並列効果をみたもの。 • Nは100,150,200の3種類を計測した • CPUは1から31の31種類について調べた • グラフを見る限り、データタイプの変換はそれほど大きなオーバーヘッドにはなっていないようだ
CPU=一定 • CPUの数を固定にして要素数を変化させたもの • CPUは5,10,15の3種類について調べた • グラフを見る限り、データタイプの変換はそれほど大きなオーバーヘッドにはなっていないようだ
課題とかこれからの予定 • アルゴリズムの精度評価、他のアルゴリズムとの比較 • ocamlmpiの実装を調べる • 計測、フィルタリング、グラフ化を効果的にできるように。
参考文献 • Cでつくるニューラルネットワーク 平野廣美 • MPI並列プログラミング P.パチェコ