2012年02月29日
パラレル成功
Check関数のバグを取りパラレル処理が実行できました。
変更点:
public int Check(int pos)
{
int[] i = new int[8];
int[] j = new int[8] {0,0,0,0,0,0,0,0};
int[][] rr = {
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 },
new[] { 0, 0, 0, 0, 0, 0, 0, 0 }
};
int c;
int[] f = new int[8] {0,0,0,0,0,0,0,0};
int[] r_pos = new int[8] {0,0,0,0,0,0,0,0};
int id;
int[] koma = new int[8] {0,0,0,0,0,0,0,0};
int m, n;
if (color == 1) c = 2;
else c = 1;
r[0] = 0;
if (board[pos] == 0)
{
// for (d = 0; d < 8; d++)
Parallel.For(0, 8, d =>
この後8方向にそれぞれ駒がおけるかを見に行く部分がパラレル処理になります。
その結果。。。
16個(物理的には8個)のCPU使用率が50%となりました。
パラレル処理は動いているようです。
上のコードを見るとローカル変数を8個用意してそれぞれ初期化する処理も追加しています。
この関数は大量に使われますが、超短時間で処理が終わります。
パラレル処理の8個の処理時間は均等ではなく最長処理が帰ってくるまで他は待っています。
パラレル処理にもそれなりのコストがかかりそうですよね。。。
次は、パラレル処理する前ローカル変数8倍のコストを見るため時間計測した結果です。
なんと、3倍になっちゃいました(LEVEL6-1に対して-2)。
でも、8個パラレル処理すれば短くなるかもと計測したのですが、
ログファイルが空っぽでした。。。(前ファイルをメモ帳であけたままだったかも)
僕の感じでは、パラレル処理したほうが思考時間は延びた様に感じます。
これが、先ほどパラレル処理のコストかなと。。。(^^ゞ
明日時間測定をもう一度してみます。
データを残さないとね。。。
まあ、想定された事なので驚きはしませんが、
パラレル処理は別の部分で導入します。
今日は、パラレル処理練習ですね。
パラレル処理、結構簡単に実現出来るかもしれません(^^♪
コンピュータが打てる手を8つに分けて(8より少ない時は1手毎に)、パラレル処理かな。。。
それにしても梅咲かないですね。。。
今週末は別の花を撮りに行く事になりそうです。
トラックバックURL
この記事へのコメント
ローカル変数を複製すしないといけないとかでないかぎり並行処理のコストが高くつくことってないと思うんですがねえ。
どなんでしょ。
恐ろしいほど時間がかかっています。
もうちょっと検討してみますが、
原因を解析するにはプロファイラーがあると良いのですが。。。
部分で平行処理を試してみようと考えています。