SCENE RESEARCH STATION  
with my everyday
thinking-and-doctrine

*2006.12.12

Cell::cellでレイトレ

学部の頃(えーと、5,6年前ですか)、課題で作った超古典的raytracer
今の環境に手直しして、
cygwin @ Core2Duo E6400 (2.13GHz)
linux(fc5) @ Cell 3.2GHz
で動かしてみた。

ソースは全く同じで、
make時のオプションも -O3 -funroll-loops で同じ。

bmpで保存する際に、Cell側がBigEndianなので、バイトスワップしてるくらい。
SPEは使わず、PPEのみの使用。

結果は、
0m06s @ Core2Duo , 0m10s @ Cell
0m23s @ Core2Duo , 0m25s @ Cell
0m21s @ Core2Duo , 0m19s @ Cell
2m20s @ Core2Duo , 1m56s @ Cell

PPEは意外と速いな。
全部倍くらい差が付くと思ったんですが、
単純なコードなので、純粋にクロックの高さが結果に出てるのかも。

spuでもやるか!と思ったんですけど、無理やり同じソースをspu-gccに食わせたら、
リンク時に relocation truncated to fit : SPU_ADDR16,SPU_REL16 が大量発生して失敗。

このエラーは、コンパイル時は相対ジャンプを想定してたけど、
いざリンクしようとしたら届かなくなっちゃった、ごめん、
という場合に出るものと思っていたのですが、
(その場合は、メモリモデルとかを変えたら大抵通るようになる)
どうやらSPUの場合はこれが出る=256KBオーバーらしい。
16bitしかアドレス空間ないのか。なるほど。

いろいろライブラリをリンクしてるし、
無茶って事は分かってたので良いけど、
やっぱportingするの面倒だよなあ。
レンダラのコアだけ切り出せば、とりあえず動くようになるとは思うが、
面倒だからまた今度。

これ、アルゴリズムを賢くして若干フェイク寄りにすれば、
多分10倍くらい速くなるし、
ちゃんとベクタライズしてSPE*6使い切れば、
さらに10倍くらい速くなるだろうから、計100倍くらい高速に…
なったりしないかなあ。


使ったソース
kmkz.jp/mtm/lab/raytrace/raytrace-20061212.tar.gz

oldlog 99-00 00-01 01 01-02 02
newlog 2002 2003 2004 2005 2006 2007
category scene | 2ch | 麻雀

Copyright (C) 2003-2004 mitsuman(mnishibe at ertl.jp) All Rights Reserved.

750k+