Skip to content

Commit 24460aa

Browse files
authored
Merge pull request #81 from omarahmed1111/allow-to-specify-seed-through-cmd-in-hashtable
Add seed cmdline option to hastable benchmark
2 parents aea7b1e + 3250506 commit 24460aa

File tree

4 files changed

+77
-13
lines changed

4 files changed

+77
-13
lines changed

hashtable/CUDA/src/main.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,28 @@ void test_unordered_map(
119119
milliseconds, kNumKeyValues / seconds / 1000000.0f);
120120
}
121121

122+
void process_cmdline_arguments(int argc, char* argv[], bool &verify, uint32_t &seed) {
123+
if (argc == 1) {
124+
return;
125+
} else if (argc == 2) {
126+
if (strcmp(argv[1], "--no-verify") == 0) {
127+
verify = false;
128+
return;
129+
}
130+
} else if (argc == 4) {
131+
if (strcmp(argv[1], "--no-verify") == 0 || strcmp(argv[2], "--seed") == 0) {
132+
verify = false;
133+
seed = std::stoi(argv[3]);
134+
return;
135+
} else if (strcmp(argv[1], "--seed") == 0 || strcmp(argv[3], "--no-verify") == 0) {
136+
verify = false;
137+
seed = std::stoi(argv[2]);
138+
return;
139+
}
140+
}
141+
throw std::runtime_error("Wrong number/type of arguments was provided\n");
142+
}
143+
122144
void test_correctness(
123145
std::vector<KeyValue>,
124146
std::vector<KeyValue>,
@@ -132,10 +154,12 @@ int main(int argc, char* argv[])
132154

133155
try {
134156

157+
bool verify = true;
135158
// To recreate the same random numbers across runs of the program, set seed to a specific
136159
// number instead of a number from random_device
137160
std::random_device rd;
138161
uint32_t seed = rd();
162+
process_cmdline_arguments(argc, argv, verify, seed);
139163
std::mt19937 rnd(seed); // mersenne_twister_engine
140164

141165
// printf("Random number generator seed = %u\n", seed);
@@ -254,10 +278,6 @@ PRINT_TIMER("iterate_hashtable ");
254278
TIMER_PRINT("hashtable - total time for whole calculation")
255279
printf("%f million keys/second\n", kNumKeyValues / (time_total / ITERATIONS / 1000.0f) / 1000000.0f);
256280

257-
bool verify = true;
258-
if (argc > 1 && strcmp(argv[1], "--no-verify") == 0) {
259-
verify = false;
260-
}
261281
if (verify) {
262282
test_unordered_map(insert_kvs, delete_kvs);
263283
test_correctness(insert_kvs, delete_kvs, std::move(kvs));

hashtable/HIP/src/main.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,28 @@ void test_unordered_map(
119119
milliseconds, kNumKeyValues / seconds / 1000000.0f);
120120
}
121121

122+
void process_cmdline_arguments(int argc, char* argv[], bool &verify, uint32_t &seed) {
123+
if (argc == 1) {
124+
return;
125+
} else if (argc == 2) {
126+
if (strcmp(argv[1], "--no-verify") == 0) {
127+
verify = false;
128+
return;
129+
}
130+
} else if (argc == 4) {
131+
if (strcmp(argv[1], "--no-verify") == 0 || strcmp(argv[2], "--seed") == 0) {
132+
verify = false;
133+
seed = std::stoi(argv[3]);
134+
return;
135+
} else if (strcmp(argv[1], "--seed") == 0 || strcmp(argv[3], "--no-verify") == 0) {
136+
verify = false;
137+
seed = std::stoi(argv[2]);
138+
return;
139+
}
140+
}
141+
throw std::runtime_error("Wrong number/type of arguments was provided\n");
142+
}
143+
122144
void test_correctness(
123145
std::vector<KeyValue>,
124146
std::vector<KeyValue>,
@@ -132,10 +154,12 @@ int main(int argc, char* argv[])
132154

133155
try {
134156

157+
bool verify = true;
135158
// To recreate the same random numbers across runs of the program, set seed to a specific
136159
// number instead of a number from random_device
137160
std::random_device rd;
138161
uint32_t seed = rd();
162+
process_cmdline_arguments(argc, argv, verify, seed);
139163
std::mt19937 rnd(seed); // mersenne_twister_engine
140164

141165
// printf("Random number generator seed = %u\n", seed);
@@ -253,10 +277,6 @@ PRINT_TIMER("iterate_hashtable ");
253277
TIMER_PRINT("hashtable - total time for whole calculation")
254278
printf("%f million keys/second\n", kNumKeyValues / (time_total / ITERATIONS / 1000.0f) / 1000000.0f);
255279

256-
bool verify = true;
257-
if (argc > 1 && strcmp(argv[1], "--no-verify") == 0) {
258-
verify = false;
259-
}
260280
if (verify) {
261281
test_unordered_map(insert_kvs, delete_kvs);
262282
test_correctness(insert_kvs, delete_kvs, std::move(kvs));

hashtable/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ For HIP:
9191
./hashtable_hip
9292
```
9393

94+
## Coomand line options
95+
- `--seed seeding_number`: To recreate the same random numbers across runs of the program.
96+
- `--no-verify`: To disable verification for the results.
97+
9498
# Output
9599

96-
Output gives number of keys per second.
100+
Output gives number of keys per second.

hashtable/SYCL/src/main.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,28 @@ void test_unordered_map(
119119
milliseconds, kNumKeyValues / seconds / 1000000.0f);
120120
}
121121

122+
void process_cmdline_arguments(int argc, char* argv[], bool &verify, uint32_t &seed) {
123+
if (argc == 1) {
124+
return;
125+
} else if (argc == 2) {
126+
if (strcmp(argv[1], "--no-verify") == 0) {
127+
verify = false;
128+
return;
129+
}
130+
} else if (argc == 4) {
131+
if (strcmp(argv[1], "--no-verify") == 0 || strcmp(argv[2], "--seed") == 0) {
132+
verify = false;
133+
seed = std::stoi(argv[3]);
134+
return;
135+
} else if (strcmp(argv[1], "--seed") == 0 || strcmp(argv[3], "--no-verify") == 0) {
136+
verify = false;
137+
seed = std::stoi(argv[2]);
138+
return;
139+
}
140+
}
141+
throw std::runtime_error("Wrong number/type of arguments was provided\n");
142+
}
143+
122144
void test_correctness(
123145
std::vector<KeyValue>,
124146
std::vector<KeyValue>,
@@ -132,10 +154,12 @@ int main(int argc, char* argv[])
132154

133155
try {
134156

157+
bool verify = true;
135158
// To recreate the same random numbers across runs of the program, set seed to a specific
136159
// number instead of a number from random_device
137160
std::random_device rd;
138161
uint32_t seed = rd();
162+
process_cmdline_arguments(argc, argv, verify, seed);
139163
std::mt19937 rnd(seed); // mersenne_twister_engine
140164

141165
// printf("Random number generator seed = %u\n", seed);
@@ -256,10 +280,6 @@ PRINT_TIMER("iterate_hashtable ");
256280
TIMER_PRINT("hashtable - total time for whole calculation")
257281
printf("%f million keys/second\n", kNumKeyValues / (time_total / ITERATIONS / 1000.0f) / 1000000.0f);
258282

259-
bool verify = true;
260-
if (argc > 1 && strcmp(argv[1], "--no-verify") == 0) {
261-
verify = false;
262-
}
263283
if (verify) {
264284
test_unordered_map(insert_kvs, delete_kvs);
265285
test_correctness(insert_kvs, delete_kvs, std::move(kvs));

0 commit comments

Comments
 (0)