画像ファイルや動画ファイルのピクセルデータを取得する処理を、 別プロセスのサーバに切り出してみます。
まぁこんな事をしたら、普通、動作は遅くなるはずです。
これは明日のための布石です。
ややこしいので、従来の交点を求めたりするサーバは、 rt server (レイトレサーバ) とでも呼んで区別するようにします。
$ cat v26.patch | ( cd rt ; patch -p1 ) $ cd rt $ make clean $ make
いつものデータで速度比較。
まず従来方式
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v26/objs_1_2 n=1 init_sec=5 div=2 : wh : 76800/76800(100.0%) : fin 7m 31.17s 以前の v25 wh : 76800/76800(100.0%) : fin 7m 50.96s v24 wh : 76800/76800(100.0%) : fin 7m 44.42s v23 wh : 76800/76800(100.0%) : fin 7m 48.33s
イメージ用のサーバプロセスを使う場合は
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v26/objs_1_2_is n=1 init_sec=5 div=2 use_img_srv : wh : 76800/76800(100.0%) : fin 8m 12.84s
( (8*60+12.84) / (7*60+31.17) - 1 ) * 100 = 9.23 パーセント低下
サーバプロセス分離版
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v26/objs_1_2_s n=1 init_sec=5 div=2 use_srv : wh : 76800/76800(100.0%) : fin 9m 22.96s 以前の v25 wh : 76800/76800(100.0%) : fin 9m 34.91s v24 wh : 76800/76800(100.0%) : fin 9m 38.24s v23 wh : 76800/76800(100.0%) : fin 9m 9.07s $ rm xdat
イメージ用のサーバプロセスを使う場合は
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v26/objs_1_2_s_is n=1 init_sec=5 div=2 use_srv use_img_srv : wh : 76800/76800(100.0%) : fin 9m 54.44s $ rm xdat
( (9*60+54.44) / (9*60+22.96) - 1 ) * 100 = 5.59 パーセント低下
別プロセスのところをC言語で実装版
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v26/objs_1_2_sc n=1 init_sec=5 div=2 use_srv srv_c : wh : 76800/76800(100.0%) : fin 53.40s 以前の v25 wh : 76800/76800(100.0%) : fin 53.95s v24 wh : 76800/76800(100.0%) : fin 54.07s v23 wh : 76800/76800(100.0%) : fin 1m 50.29s
イメージ用のサーバプロセスを使う場合は
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v26/objs_1_2_sc_is n=1 init_sec=5 div=2 use_srv srv_c use_img_srv : wh : 76800/76800(100.0%) : fin 1m 6.02s
( (1*60+6.02) / 53.40 - 1 ) * 100 = 23.63 パーセント低下
まぁそうですね。 画像のピクセルデータ取得処理に比べて、 他の箇所が速いほど低下は大きくなります。
では、v25の接近パターンの続きを...
$ ./cg.py eyep=[0,0,0],50,20 sec=10 data_name=ball_world name=out_v26/bw_near_2 div=2 use_srv srv_c use_img_srv init_sec=10 : wh : 75840/76800(98.8%) : total 3m 3.55s : rest 2.29s : 2018/04/21 13:43:12 wh : 76444/76800(99.5%) : total 3m 3.10s : rest 0.84s : 2018/04/21 13:43:12 wh : 76800/76800(100.0%) : fin 3m 2.88s frm : 81/300(27.0%) : total 14h 36m 51.49s : rest 10h 40m 6.39s : 2018/04/22 00:23:18 wh : 0/76800(0.0%) : not start yet Traceback (most recent call last): File "./img_sock.py", line 158, inf() File "./img_sock.py", line 137, in col col = img.col(*lst) File "/Users/kondoh/rt_wk/rt_v26/img.py", line 139, in col return videos.col(fn, sec, x, y, def_col, rep) File "/Users/kondoh/rt_wk/rt_v26/img.py", line 102, in col return img_sec(fn, sec)[y, x] TypeError: 'NoneType' object is not subscriptable Traceback (most recent call last): File "./cg.py", line 304, in f(data, lights, eye2g, wh2eye, sc_sz, video) File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 149, in draw col = get_col(data, lights, l_g, sec) File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 132, in get_col col_ = reflact_col() File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 129, in reflact_col col = get_col( data, lights, ref_l, sec, nest_rate * reflact, d ) File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 132, in get_col col_ = reflact_col() File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 129, in reflact_col col = get_col( data, lights, ref_l, sec, nest_rate * reflact, d ) File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 87, in get_col col = map_col( crs, rev, sec ) File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 43, in map_col cols = ut.filter_lst( lambda col: col != [], cols ) File "/Users/kondoh/rt_wk/rt_v26/ut.py", line 14, in filter_lst = lambda f, lst: list( filter( f, lst ) ) File "/Users/kondoh/rt_wk/rt_v26/rt.py", line 40, in f return col_func( fn, sec, int(x), int(y), [], m.get('rep') ) File "/Users/kondoh/rt_wk/rt_v26/img_sock.py", line 79, in col (col_, s) = bin.unpack_col(s) File "/Users/kondoh/rt_wk/rt_v26/bin.py", line 27, in unpack_col ( col[i], s ) = unpack_i4(s) File "/Users/kondoh/rt_wk/rt_v26/bin.py", line 17, in unpack_i4 = lambda s: ( struct.unpack_from('=i', s)[0], s[4:] ) struct.error: unpack_from requires a buffer of at least 4 bytes
!?