目的
conway's game of lifeのアルゴリズムを知り、並列分散処理を勉強するためのモデルとして適している理由を考える。
アルゴリズム
b3/s23というルールで動いている。
bはbornでsはsurvivesです。
1が生、0が死になってます。
b3/s23
b3
自分の周りのcellを見て、3つ生きてるやつがいると新しいやつが生まれる。
s23
自分の周りのcellを見て2つか3つ行きている場合、生き残ります。また、ここで2未満4以上の場合は死にます。
conway's game of lifeの以下のコードがこのルールに該当する。
// cell dies
if(count < 2 || count > 3)
M[threadId] = 0;
// cell stays the same
if(count == 2)
M[threadId] = C[threadId];
// cell either stays alive, or is born
if(count == 3)
M[threadId] = 1;
自分の周りの定義
自分の周りの定義が「conway's game of life」では以下のコードのようになっている。
このコードでは自分の周りの生きているcellを数えてカウントに入れている。
このカウントをb3/s23で示した、if文に投げる。
count = C[j*n_x+i_left] + C[j_down*n_x+i]
+ C[j*n_x+i_right] + C[j_up*n_x+i] + C[j_up*n_x+i_left]
+ C[j_down*n_x+i_right] + C[j_down*n_x+i_left]
+ C[j_up*n_x+i_right];
各cellが独立して動いていて、周りのcellの状態を見るため各cellが同期している必要があるため並列分散処理の勉強のモデルとして適しているんだと感じました。
やること
自分の周りに関する部分のソースを読む。
pycudaがユーザのコードをどう処理しているか調べる。