画像サーバからのデータをクライアント側でキャッシュ

色々とデータを試してみると、画像のマッピングが無しだと何だかすごく処理速度が速い感じ。

これは画像サーバとのやりとりが、かなり重いのでは?

という事で、レイトレサーバから画像サーバに要求を出して動画のピクセルを取得する箇所で、 クライアントであるレイトレサーバの中で、一コマ分の画像全体をまとめて取得しキャッシュするようにしてみました。 メモリ使いまくりです。

これで最初のピクセルの取得時に、画像全体のデータをまとめて取得しますが、 以降は次のコマに時間が進むまでは、画像サーバへのアクセスは発生しません。

画像サーバには、動画のフレーム数やフレームレートを取得するAPIと、 ある時刻の一コマ分の画像全体を取得するAPIを追加しました。 クライアント側はC言語の実装の方だけ、キャッシュの機構を追加しています。

マッピングしても、画像全体のピクセルを使う訳じゃないので、 初回の取得時間が無駄になる場合があるかも知れませんが、 毎回プロセス間通信する方が、やっぱり負担が大きいでしょう。

v42.patch

$ 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
  :