Try & Error

現在の探索では次の階層の配置の評価を行うときと,新しく配置可能な位置を求めるときとで同じ処理を二回している.
これは無駄なのでここを改善すれば速度が上がるだろうと期待していた.
しかしやってみると全く反対の結果になった.
なぜこのようになるかと言えば,計算の結果を配列に保持するため,メモリへのアクセスが発生してしまうからだ.
この結果はかなり暗澹となってしまった.
石の反転でZebraが私のプログラムよりもずっと高速なのは,全ての方向について条件分岐を使いまくり,無駄な部分は早々に打ち切るからなのだが,それをSPUでやると圧倒的に遅くなるので,固定数のループを回すようになった.
この無駄をなくすためにキャッシュを保持しようとすると,10*16=160byteの書き込みをすることになる.この書き込み/読み込みのためのウェイトが計算よりも遅いので,レジスタを使い回して済むならば2度同じ計算をした方がよいということになってしまう.
演算自体をビット演算のような軽いものにチューニングしていけばいくほどアーキテクチャからくるオーバーヘッドで頭打ちになり,つらい.