[Assorted-commits] SF.net SVN: assorted:[1259] container-bench/trunk/src
Brought to you by:
yangzhang
From: <yan...@us...> - 2009-03-06 07:22:59
|
Revision: 1259 http://assorted.svn.sourceforge.net/assorted/?rev=1259&view=rev Author: yangzhang Date: 2009-03-06 07:22:58 +0000 (Fri, 06 Mar 2009) Log Message: ----------- reorganized; added fast_map Modified Paths: -------------- container-bench/trunk/src/Makefile container-bench/trunk/src/bench.cc Modified: container-bench/trunk/src/Makefile =================================================================== --- container-bench/trunk/src/Makefile 2009-03-06 07:22:51 UTC (rev 1258) +++ container-bench/trunk/src/Makefile 2009-03-06 07:22:58 UTC (rev 1259) @@ -1,4 +1,5 @@ -CXXFLAGS += -O3 -Wall +CXXFLAGS += -O3 -Wall -DNDEBUG +#CXXFLAGS += -g3 -Wall BINS := bench all: $(BINS) Modified: container-bench/trunk/src/bench.cc =================================================================== --- container-bench/trunk/src/bench.cc 2009-03-06 07:22:51 UTC (rev 1258) +++ container-bench/trunk/src/bench.cc 2009-03-06 07:22:58 UTC (rev 1259) @@ -1,30 +1,38 @@ #include <map> #include <iostream> -#include <vector> +#include <vector> // TODO +#include <commons/fast_map.h> #include <commons/rand.h> #include <commons/time.h> #include <stx/btree_map.h> #include <boost/foreach.hpp> #include <tr1/unordered_map> +#include <google/dense_hash_map> #define foreach BOOST_FOREACH using namespace std; using namespace commons; using namespace stx; using namespace tr1; +using namespace google; -enum { len = 1000000 }; +enum { len = 20000000 }; int *xs; template<typename T> inline void load(T &m, const string &label) { + size_t slen = len / 10; + size_t i, j; long long start = current_time_millis(); - for (int i = 0; i < len; i++) { - m[i] = xs[i]; + for (j = 0; j < 10; ++j) { + for (i = 0; i < slen; ++i) + m[i] = xs[i]; + if (current_time_millis() > start + 1000) + break; } - long long end = current_time_millis(); - cout << label << ": " << end - start << " ms" << endl; + long long diff = current_time_millis() - start; + cout << label << ": " << j * slen + i << " ops in " << diff << " ms, or " << double(j * slen + i) / double(diff) * 1000 << " ops/s" << endl; } template<typename T> @@ -36,22 +44,29 @@ foreach (pii p, m) { xs[p.first] = p.second; } - long long end = current_time_millis(); - cout << label << ": " << end - start << " ms" << endl; + long long diff = current_time_millis() - start; + cout << label << ": " << m.size() << " ops in " << diff << " ms, or " << double(m.size()) / double(diff) * 1000 << " ops/s" << endl; } template<typename T> inline void -index(T &m, const string &label) +index(T &m, const string &label, size_t len) { long long start = current_time_millis(); - for (int i = 0; i < len; i++) { + for (size_t i = 0; i < len; i++) { xs[i] = m[i]; } - long long end = current_time_millis(); - cout << label << ": " << end - start << " ms" << endl; + long long diff = current_time_millis() - start; + cout << label << ": " << len << " ops in " << diff << " ms, or " << double(len) / double(diff) * 1000 << " ops/s" << endl; } +template<typename T> +inline void +index(T &m, const string &label) +{ + index(m, label, m.size()); +} + int main(int argc, char **argv) { int mode = atoi(argv[1]); int nreps = 2; @@ -88,8 +103,27 @@ int *m = new int[len]; load(m, "arr init"); load(m, "arr reload"); - index(m, "arr index"); + index(m, "arr index", len); } + if (mode & 0x10) { + dense_hash_map<int, int> m; + m.set_empty_key(-1); + m.set_deleted_key(-2); + load(m, "gmap init"); + load(m, "gmap reload"); + iter(m, "gmap iter"); + index(m, "gmap index"); + } + if (mode & 0x20) { + fast_map m; + m.set_empty_key(-1); + m.set_deleted_key(-2); + load(m, "fmap init"); + load(m, "fmap reload"); + //iter(m, "fmap iter"); + index(m, "fmap index"); + } + cout << endl; } return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |