« インフルエンザじゃないの? | メイン | DANGER ZONE »
2005年12月30日
次世代機向けのコーディング術
Writing Efficient Game Code for Next-Gen Console Architectures
- キャッシュミスのペナルティが大きいのでデータを小さくする
- 分岐予測ミスのペナルティも大きいので分岐を使わないコードを書く
- コプロセッサのレイテンシーが大きいので複数のデータの演算を連続して行ってスループットを高める
アセンブラによるカリカリチューンの低レベルプログラミングの時代は終わり、高速化はプロセッサやコンパイラの性能にまかせ、高級言語による頑健性や保守性を重視するプログラムの時代になったと思ったら、またハードウェアを意識したプログラムを書かされるのですか?
ゲームプログラミングは他の分野に比べ速度を重視する傾向があるので、ある程度はしょうがないんですけどね。 チューンの必要があるのはボトルネックになっている部分だけだと思うし。いわゆる80:20ルールってやつ。
しかし、いくらなんでも、分岐を避けるためにこんな書き方はしたくないなー。
if( ptr != 0 ) ptr->next = prev; // 分岐あり(低速)
*( ptr != 0 ? &ptr->next : &dummy ) = prev; // 分岐なし(高速)
BASIC で IF は遅いから論理式を使いなさい、とか言われていた遥か遠い時代を思い出してしまった。
「良いコンパイラなら、if で書くより速いコードを生成する」と言ってるけど、本当に良いコンパイラならどっちで書いても分岐命令を使わないコードを生成してほしい。 こんな単純なコードならそれくらい可能でしょ?
投稿者 sike : 2005年12月30日 18:04
トラックバック
このエントリーのトラックバックURL:
http://ashiato.jp/mt33/mt-tb.cgi/42