OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-SimpleGPUHashTable commits / 11ca395

Set random number once at start of program so random number sequence can be more easily reproduced
11ca3950bae1f3b44ae14f56dceb86d7b55c042e
by David Farrell <nosferalatu@gmail.com> · 2020-03-10T05:14:27.000Z

Changed files (1) +18 -11

src/main.cpp +18 -11
……@@ -10,10 +10,8 @@
1010
1111// Create random keys/values in the range [0, kEmpty)
1212// kEmpty is used to indicate an empty slot
13std::vector<KeyValue> generate_random_keyvalues(uint32_t numkvs)
13std::vector<KeyValue> generate_random_keyvalues(std::mt19937& rnd, uint32_t numkvs)
1414{
15 std::random_device rd;
16 std::mt19937 gen(rd()); // mersenne_twister_engine
1715 std::uniform_int_distribution<uint32_t> dis(0, kEmpty - 1);
1816
1917 std::vector<KeyValue> kvs;
……@@ -21,8 +19,8 @@ std::vector<KeyValue> generate_random_keyvalues(uint32_t numkvs)
2119
2220 for (uint32_t i = 0; i < numkvs; i++)
2321 {
24 uint32_t rand0 = dis(gen);
25 uint32_t rand1 = dis(gen);
22 uint32_t rand0 = dis(rnd);
23 uint32_t rand1 = dis(rnd);
2624 kvs.push_back(KeyValue{rand0, rand1});
2725 }
2826
……@@ -30,9 +28,9 @@ std::vector<KeyValue> generate_random_keyvalues(uint32_t numkvs)
3028}
3129
3230// return numshuffledkvs random items from kvs
33std::vector<KeyValue> shuffle_keyvalues(std::vector<KeyValue> kvs, uint32_t numshuffledkvs)
31std::vector<KeyValue> shuffle_keyvalues(std::mt19937& rnd, std::vector<KeyValue> kvs, uint32_t numshuffledkvs)
3432{
35 std::random_shuffle(kvs.begin(), kvs.end());
33 std::shuffle(kvs.begin(), kvs.end(), rnd);
3634
3735 std::vector<KeyValue> shuffled_kvs;
3836 shuffled_kvs.resize(numshuffledkvs);
……@@ -88,16 +86,25 @@ void test_correctness(std::vector<KeyValue>, std::vector<KeyValue>, std::vector<
8886
8987int main()
9088{
89 // To recreate the same random numbers across runs of the program, set seed to a specific
90 // number instead of a number from random_device
91 std::random_device rd;
92 uint32_t seed = rd();
93 std::mt19937 rnd(seed); // mersenne_twister_engine
94
95 printf("Random number generator seed = %u\n", seed);
96
9197 while (true)
9298 {
93 // Initialize keyvalue pairs with random numbers
94 std::vector<KeyValue> insert_kvs = generate_random_keyvalues(kNumKeyValues);
95 std::vector<KeyValue> delete_kvs = shuffle_keyvalues(insert_kvs, kNumKeyValues / 2);
99 printf("Initializing keyvalue pairs with random numbers...\n");
96100
101 std::vector<KeyValue> insert_kvs = generate_random_keyvalues(rnd, kNumKeyValues);
102 std::vector<KeyValue> delete_kvs = shuffle_keyvalues(rnd, insert_kvs, kNumKeyValues / 2);
103
104 // Begin test
97105 printf("Testing insertion/deletion of %d/%d elements into GPU hash table...\n",
98106 (uint32_t)insert_kvs.size(), (uint32_t)delete_kvs.size());
99107
100 // Begin test
101108 Time timer = start_timer();
102109
103110 KeyValue* pHashTable = create_hashtable(kHashTableCapacity);