色々とデータを試してみると、画像のマッピングが無しだと何だかすごく処理速度が速い感じ。
これは画像サーバとのやりとりが、かなり重いのでは?
という事で、レイトレサーバから画像サーバに要求を出して動画のピクセルを取得する箇所で、 クライアントであるレイトレサーバの中で、一コマ分の画像全体をまとめて取得しキャッシュするようにしてみました。 メモリ使いまくりです。
これで最初のピクセルの取得時に、画像全体のデータをまとめて取得しますが、 以降は次のコマに時間が進むまでは、画像サーバへのアクセスは発生しません。
画像サーバには、動画のフレーム数やフレームレートを取得するAPIと、 ある時刻の一コマ分の画像全体を取得するAPIを追加しました。 クライアント側はC言語の実装の方だけ、キャッシュの機構を追加しています。
マッピングしても、画像全体のピクセルを使う訳じゃないので、 初回の取得時間が無駄になる場合があるかも知れませんが、 毎回プロセス間通信する方が、やっぱり負担が大きいでしょう。
$ mv rt_v41 rt_v42 $ cat v42.patch | ( cd rt_v42 ; patch -p1 ) $ cd rt_v42 $ make clean $ make
では、さっそくいつもの速度確認。
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v42/objs_1_2_sc n=1 init_sec=5 div=2 : wh : 76800/76800(100.0%) : fin 3.16s
以前の v39 wh : 76800/76800(100.0%) : fin 15.37s v38 wh : 76800/76800(100.0%) : fin 15.09s v37 wh : 76800/76800(100.0%) : fin 15.49s v36 wh : 76800/76800(100.0%) : fin 15.13s v35 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
!!! まじでか。こんなに効果ありなん?
前回のデータで、ちょっと上下の移動を増やしてみて、分割はdiv=2程度で試してみます。
$ ./cg.py eyep=[0,0,0],[300,300,200],10 sec=10 yaml=dat2.yaml data_name=colosseum name=out_v42/col2 div=2 : wh : 72895/76800(94.9%) : total 7.92s : rest 0.40s : 2018/05/29 22:36:59 wh : 76800/76800(100.0%) : fin 7.53s frm : 300/300(100.0%) : fin 46m 39.03s estimated 3.11 hour at 640*480 30fps $ ls -lt out_v42/ | head -rw-r--r-- 1 kondoh staff 1868348 5 29 22:37 col2.mp4 :
やはり速い。予想時間3.11時間になってます。 v41では同じdat2.yamlで14時間かかってました。
では、せっかくなので20秒で。
$ ./cg.py eyep=[0,0,0],[300,300,200],10 sec=20 yaml=dat2.yaml data_name=colosseum name=out_v42/col :