サーバで一度に複数のピクセルを処理

レイトレサーバに一度に複数のピクセルを処理させるための変更をしてみました。

また、画像サーバ側も一度に複数のピクセルを書き込めるように変更しております。

rt.py
  :
names = names[:2]
  :
rates = map( lambda name: 0.2 / len(names), names )
  :

1つのrtサーバが一度に処理するピクセル数は、 1枚の画面のピクセル数の20パーセントを、rtサーバ数で割った数にしてみました。

同じくらいの処理能力のrtサーバならば、 1つのrtサーバあたり5回まわれば、画面が1つ描画されます。

v35.patch

$ mv rt_v34 rt_v35
$ cat v35.patch | ( cd rt_v35 ; patch -p1 )
$ cd rt_v35
$ make clean
$ make

では、速度確認。

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v35/objs_1_2_sc n=1 init_sec=5 div=2
  :
wh : 76800/76800(100.0%) : fin 16.16s
  以前の
  v34  wh : 76800/76800(100.0%) : fin 38.47s
  v32  wh : 76800/76800(100.0%) : fin 26.84s
  v31  wh : 76800/76800(100.0%) : fin 40.50s
  v30  wh : 76800/76800(100.0%) : fin 38.39s
  v29  wh : 76800/76800(100.0%) : fin 1m 44.72s
  v28  wh : 76800/76800(100.0%) : fin 1m 18.06s
  v27  wh : 76800/76800(100.0%) : fin 1m 8.39s
  v26  wh : 76800/76800(100.0%) : fin 1m 6.02s

最速出ました v^_^)

(1 - 16.16/26.84) * 100 = 39.79

過去の最速から約40パーセント短縮です。

今回は裏面も見えるようにズラしてみます。 まず荒削り設定で。

$ ./cg.py eyep=[0,0,-5],[100,100,10],10 sec=10 data_name=objs name=out_v35/objs_tst div=4 fps=10
  :
wh : 19200/19200(100.0%) : fin 4.67s
frm : 100/100(100.0%) : fin 8m 42.26s

(8*60+42.26) *4*4*3 /60/60 = 6.96 時間の予想

このデータ、初期の頃では10秒の動画を作るのに、15日くらいかかる予想が出てたはずです。 荒削りで10分未満、フルでも7時間の予想。本当だろうか?

$ ./cg.py eyep=[0,0,-5],[100,100,10],10 sec=10 data_name=objs name=out_v35/objs
  :
wh : 307200/307200(100.0%) : fin 1m 19.09s
frm : 300/300(100.0%) : fin 8h 7m 5.64s

8時間でした。

-rw-r--r--  1 kondoh  staff  2722444  5  9 19:45 out_v34/objs.mp4
-rw-r--r--  1 kondoh  staff  1889074  5 10 07:11 out_v35/objs.mp4

3M制限もOK。 同じ10秒の動画でも、フレームごとの単純さとフレーム間の変化の具合で、ファイルサイズはバラバラです。

さらに、続きの10秒を。

$ ./cg.py eyep=[0,0,-5],[100,100,10],10 sec=10 data_name=objs name=out_v35/objs_s10 init_sec=10
  :
wh : 307200/307200(100.0%) : fin 55.07s
frm : 300/300(100.0%) : fin 7h 17m 34.75s

$ ./srvs.py all_kill
-rw-r--r--  1 kondoh  staff  1711910  5 11 03:44 out_v35/objs_s10.mp4

繋ぎ合わせてみます。

$ (cd out_v35 ; ls objs_s10*.jpg | sed -e 's/objs_s10\(.*\)/mv objs_s10\1 objs1\1/' | sh)

$ ls out_v35 | head
objs100001.jpg
objs100002.jpg
objs100003.jpg
objs100004.jpg
objs100005.jpg
objs100006.jpg
objs100007.jpg
objs100008.jpg
objs100009.jpg
objs100010.jpg

$ ./img.py out_v35/objs out_v35/objs.mp4 cmd=v2i

$ ls -l out_v35/objs_sum.mp4 
-rw-r--r--  1 kondoh  staff  3484415  5 11 04:08 out_v35/objs_sum.mp4

20秒だとさすがに3M超えました。

3M分のフレームまでにするツールの処理を、
バイナリサーチを使うように改良したので試しておきます。

$ ./img.py dmy out_v35/objs_sum.mp4 cmd=3M

$ ls -l v.mp4 
-rw-r--r--  1 kondoh  wheel  3144776  5 11 04:15 v.mp4

OK 3M以内。

$ cp v.mp4 out_v35/objs_sum_3m.mp4