Boost logo

Boost :

Subject: [boost] unordered_map 32bit VS 64bit
From: Avikam Bara-nes (avikamb_at_[hidden])
Date: 2012-01-25 02:52:33


Hi,
I'm porting a project from Linux 32bit to Linux 64bit. While doing so I
notice that I have a dramatic performance degradation with unordered_map.
My platform is Ubuntu 10.4.3 64bit running on Intel Xeon X3220 but, I
tested similar program on WindowsXP SP2 64bit which running on Intel i5 and
I get the same degradation. My boost version is 1_46_1.
I use the following program in order to test unordered_map - Hop I didn't
make any copy mistakes :-).

#include <stdio.h>
#include <sys/time.h>
#include <boost/unordered_map.hpp>

int main(int argc, char *argv[])
{
   struct timeval tv_before, tv_after;
   boost::unordered_map<boost::int_32_t, boost::int32_t> boost_map;

   boost_map[1] = 2;
   boost_map[3] = 4;

   gettimeofday(&tv_before, NULL);
   for(int i = ; i < 100000; i++)
      boost_map.find(1);
    gettimeofday(&tv_after, NULL);

   printf("Boost time is %f \n",
           (double)(((tv_after.tv_sec - tv_before.tv_sec) * 1000000 +
(double)(tv_after.tv_usec - tv_before.tv_usec)) / 100000));

   return 0;
}

I use the following compile commands:
64bit - g++ -O3 perf_test -o perf_test_64bit
32bit - g++ -m32 -O3 perf_test -o perf_test_32bit

When I run the 32bit program I get 0.5 sec
When I run the 64bit program I get 1.54 sec

Any ideas ???


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk