int main(int argc, char **argv) { uint64_t i, j, t, m[101], n = strtol(argv[1], NULL, 0); std::vector<uint64_t> v; t = ntime(); m[0] = 0; try { for (i = 0; i < n; i += n / 100) { for (j = 0; j < n / 100; j ++) { v.push_back(j); } m[i / (n / 100) + 1] = ntime() - t; } } catch(const std::bad_alloc&) { err(1, "std::vector::push_back %ld", i); } (void) fprintf(stdout, "\"size\",\"time\"\n"); for (i = 0; i <= 100; i ++) (void) fprintf(stdout, "%ld,%f\n", i * (n / 100), (float) m[i] / 1000000000); exit(0); }
void map_google_densehash(int *keys, int *keys_shuffled, int *values, size_t size, size_t lookups, double *insert, double *lookup, double *erase, uint64_t *sum) { google::dense_hash_map<int, int> m; google::dense_hash_map<int, int>::iterator iter; size_t i, n; uint64_t t1, t2, s; m.max_load_factor(0.5); m.set_empty_key(-1); m.set_deleted_key(-2); t1 = ntime(); for (i = 0; i < size; i ++) m[keys[i]] = values[i]; t2 = ntime(); *insert = (double) (t2 - t1) / size; s = 0; t1 = ntime(); for (n = lookups; n; n -= i) for (i = 0; i < MIN(size, n); i ++) s += m[keys_shuffled[i]]; t2 = ntime(); *sum = s; *lookup = (double) (t2 - t1) / lookups; t1 = ntime(); for (i = 0; i < size; i ++) { iter = m.find(keys[i]); if (iter != m.end()) m.erase(iter); } t2 = ntime(); if (m.size()) errx(1, "inconsistency"); *erase = (double) (t2 - t1) / size; m.clear(); }
void map_ulib_align_hash_map(int *keys, int *keys_shuffled, int *values, size_t size, size_t lookups, double *insert, double *lookup, double *erase, uint64_t *sum) { ulib::align_hash_map<int, int> m; ulib::align_hash_map<int, int>::iterator iter; size_t i, n; uint64_t t1, t2, s; t1 = ntime(); for (i = 0; i < size; i ++) m[keys[i]] = values[i]; t2 = ntime(); *insert = (double) (t2 - t1) / size; s = 0; t1 = ntime(); for (n = lookups; n; n -= i) for (i = 0; i < MIN(size, n); i ++) s += m[keys_shuffled[i]]; t2 = ntime(); *sum = s; *lookup = (double) (t2 - t1) / lookups; t1 = ntime(); for (i = 0; i < size; i ++) { iter = m.find(keys[i]); if (iter != m.end()) m.erase(iter); } t2 = ntime(); if (m.size()) errx(1, "inconsistency"); *erase = (double) (t2 - t1) / size; m.clear(); }