L.Entisの日記: GTX275 2
日記 by
L.Entis
買ってきました。
とりあえず、走らせてみましたが、8600GTS の約10倍高速に動作しました。
公称のピーク性能では2倍ほどしか違わないはずなんですけどね。
ただ、これでようやく Core2 の1コアに何とか勝てるかどうかというレベル…
それにしても、イマドキのグラボは肉食系だね。
あまりの大きさに、本当にこれが入るのかとドキドキしちゃいました(はーと
とりあえず、走らせてみましたが、8600GTS の約10倍高速に動作しました。
公称のピーク性能では2倍ほどしか違わないはずなんですけどね。
ただ、これでようやく Core2 の1コアに何とか勝てるかどうかというレベル…
それにしても、イマドキのグラボは肉食系だね。
あまりの大きさに、本当にこれが入るのかとドキドキしちゃいました(はーと
むしろ計算どおり? (スコア:1)
SP数が32:240でそれにクロック向上分があると10倍は直線的に素直に伸びたということですか。
GPGPUはデータ転送等の最適化が難しいという評判どおり?
Re:むしろ計算どおり? (スコア:1)
8600GTS では、何が遅いと言う以前に、画面のピクセル数分のグリッドを走らせようとするだけで数百ミリ秒を要していました。
1つのブロック内のスレッド数を32まで減らして、スレッドの中身をほぼ空にしても、です。
(と言うかその状態だと、スレッドの中身に多少処理を増やしたところで、逆に大した差はありませんでしたが)
因みに、ブロックあたりのスレッド数を32より少なくしても時間は変わらない一方、ブロックあたりのスレッド数を増やすと比例して遅くなったので(グリッド数は変えていないのでトータルスレッドは増えるので当然)、32スレッドが一単位になっているであろうことを確認できました。
結論から言うと、8600GTS では、1スレッド1ピクセルで、まとまったピクセル(例えば 16x16 pixel)を1ブロックで処理し、それでグリッドを構成する、但し1スレッドの処理内容は処理性能的にかなり限定的、というのが実情かなと思います。
レイトレの場合、1 ray に対して全ポリゴンに対する当たり判定が必要で、1ピクセルに32スレッドほどは欲しいので(処理のまとまりやメモリアクセスの連続性などからも)そうしているのですが、8600GTS だと同時に処理できるピクセル数がかなり少なかったのではないかと。
GTX275 で何とか MMX/SSE コード on Core2Quad 2.66GHz の1コアに近い処理速度が出ているみたいなので、このあとアルゴリズム的な最適化を少し施して様子を見てみたいと思います。
現状、単純に全ポリゴンに対して当たり判定しているのですが、それをブロックに分けて階層化ですね。
CPU の処理ではこれがメッシュ単位でやれているのでおおよそ数倍~10倍以上の効果がある(但しメッシュの状態など場合によりけり)のですが、GPU ではどうなることでしょうw
(因みに現在テストに使っているデータは100ポリ程度なので、この最適化はこのデータではほとんど関係ないレベルだろうと思いますが(32スレッドで数回ループすればOKですから))