Boost.Bimap is a bit faster (150-190% faster), and less
memory-consumer. Whereas the old Double_map implementation does not seem to
be sensitive to caching effects, the Bimap implementation seems to be
faster when run twice or more.
See the measurements bellow. Three runs of ./bench_double_map.bimap and
./bench_double_map.cgal. They are both compiled with -O2, and
./bench_double_map.bimap is compiled with -DCGAL_USE_BOOST_BIMAP
-I<path_to_boost_bimap>.
lrineau@tsetse ~/CGAL/Packages/Mesh_2/test/Mesh_2 $ for in in 1 2 3; do
echo 'BIMAP';
./bench_double_map.bimap 200000 30;
echo 'OLD DOUBLE_MAP';
./bench_double_map.cgal 200000 30;
done
BIMAP
Total time: 4.41933
Time for 'insert': 3.15152
Time for 'pop_front': 1.26781
Resident memory: 14843904
Virtual memory: 26423296
OLD DOUBLE_MAP
Total time: 6.581
Time for 'insert': 4.5593
Time for 'pop_front': 2.0217
Resident memory: 18030592
Virtual memory: 29519872
BIMAP
Total time: 3.56746
Time for 'insert': 2.49262
Time for 'pop_front': 1.07484
Resident memory: 14843904
Virtual memory: 26427392
OLD DOUBLE_MAP
Total time: 6.76597
Time for 'insert': 4.70729
Time for 'pop_front': 2.05869
Resident memory: 18034688
Virtual memory: 29519872
BIMAP
Total time: 3.51347
Time for 'insert': 2.43964
Time for 'pop_front': 1.07383
Resident memory: 14856192
Virtual memory: 26427392
OLD DOUBLE_MAP
Total time: 6.74597
Time for 'insert': 4.6183
Time for 'pop_front': 2.12768
Resident memory: 17854464
Virtual memory: 29523968
The following (commented) line triggered the error:
direct_func[rit->second] = rit;
The new following line fixes the bug. Actually, it is even more
efficient.
direct_func.insert(std::make_pair(rit->second, rit));
"cannot_wait_for_CGAL-3.2" to the trunk.
My idea: the branch is the real working version, and I want it to be joined
back to the trunk:
__________________________ cannot_wait_for_CGAL-3.2 branch
/ \
/ \
-------------------------------------------- trunk
S M
The modification of the trunk between the splitting point S and the merging
point M has already been merged into "cannot_wait_for_CGAL-3.2".
The trunk versions of these three packages have been removed already.
Do not worry: I will "svn cp" the branch "cannot_wait_for_CGAL-3.2" into the
trunk, and the trunk will inherit from the logs of the branch.
My idea: the branch is the real working version, and I want it to be joined
back to the trunk:
__________________________ cannot_wait_for_CGAL-3.2 branch
/ \
/ \
-------------------------------------------- trunk
S M
The modification of the trunk between the splitting point S and the merging
point M has already been merged into "cannot_wait_for_CGAL-3.2".