Load/Store

いろいろと基本的なところから細かいベンチマークをとりながら再構築をしてみたが、最初に思っていたよりもずっとLoad/Storeが遅い事に気がついた。
今回、駒の効きが八方向にあるので8要素の配列を使っていたのだが、コンパイラの最適化でレジスタに格納してくれると期待していたが、そういううまい話はなかったようだ。
そのため丁寧にメモリに書き出しているため、「どこか一つでも効きのある位置」の情報を取得することと比べて「8方向に分離した、効きのある位置」を取得することは数倍の時間がかかっていた。
非常に面倒でデバグもしにくい形になるが、8方向を別の関数に分けて、配列に格納しないで済むようにやり直すことにした。

また、spu_shuffleが思っていた以上に効率的な命令である事を知ったので、積極的に使ってみることにした。
IBMのCBE Handbookによると、SHUFB命令はレイテンシが4でストールは0とローテートを示すROTと同じコストしかかからない。しかも論理演算やローテーションとは逆のパイプライン1で実行されるため、うまく配置すればIPCを高めることも期待できる。
プログラムの見通しが悪くなるし、書き換えるとなるとほぼ根本的に作り直しだが、元々CellBEの理解のためにやっている事なので、飽きるまでは最適化を施したい。