gridmap: boost::multi_arrayと比較

単純に要素アクセス速度だけを比較してみました。

http://mad-projects.iobb/svn/gail/sample/{bench_multi_array.cpp, bench_gridmap.cpp, bench_c_array.cpp}

最初gridmapが4倍くらい遅くてびっくりしたけどmulti_arrayとメモリオーダリングが違うことが原因と判明。
gridmapもオーダリングを同じにして比較したら以下のようになりました。

一億要素確保 => 全要素代入を10回ループ

一回目 二回目 三回目 四回目 五回目
gridmap 6.99 6.99 6.97 6.97 6.98
multi_array 7.86 7.85 7.85 7.85 7.85
C配列 6.43 6.41 6.42 6.42 6.41

さすがにmulti_arrayよりは早かったです。
C配列とは

int *a = new int[10000 * 10000];
...
a[10000*i + j] = ..

とかって書いたやつです。結構良い速度が出てる。
3次元をスライスして2次元配列を取り出すとかも多分multi_arrayより早くできそう。

よっしゃ、やる気出てきた。

[追記]

やっぱりイテレータはめちゃめちゃ遅い。見直しが必要だな〜。