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より早くできそう。
よっしゃ、やる気出てきた。
[追記]
やっぱりイテレータはめちゃめちゃ遅い。見直しが必要だな〜。