From ce5f65af14e6ec40a16029e993293fcfc946c62b Mon Sep 17 00:00:00 2001 From: Vladimir Paramuzov Date: Wed, 26 Apr 2023 12:52:38 +0400 Subject: [PATCH] [GPU] Use hash of test name for random generator initialization (#17213) --- .../tests/fusions/fusion_test_common.hpp | 76 +++++++++++++++---- .../fusions/scatter_nd_update_fusion_test.cpp | 3 +- .../intel_gpu/tests/test_utils/test_utils.h | 30 -------- 3 files changed, 64 insertions(+), 45 deletions(-) diff --git a/src/plugins/intel_gpu/tests/fusions/fusion_test_common.hpp b/src/plugins/intel_gpu/tests/fusions/fusion_test_common.hpp index e50df802bb5..1caec43cb0c 100644 --- a/src/plugins/intel_gpu/tests/fusions/fusion_test_common.hpp +++ b/src/plugins/intel_gpu/tests/fusions/fusion_test_common.hpp @@ -30,7 +30,14 @@ public: static const int min_random = -200; static const int max_random = 200; + std::default_random_engine generator{0}; + void SetUp() override { + std::string suite_name = std::string(::testing::UnitTest::GetInstance()->current_test_info()->test_suite_name()) + + std::string(::testing::UnitTest::GetInstance()->current_test_info()->name()); + auto seed = std::hash{}(suite_name); + + generator = std::default_random_engine{static_cast(seed)}; cfg_fused = get_test_default_config(engine); cfg_not_fused = get_test_default_config(engine); @@ -107,20 +114,63 @@ public: } } + template + std::vector generate_random(size_t a, int min, int max, int k = 8) { + // 1/k is the resolution of the floating point numbers + std::uniform_int_distribution distribution(k * min, k * max); + std::vector v(a); + + for (size_t i = 0; i < a; ++i) { + v[i] = (ReturnType)distribution(this->generator); + v[i] /= k; + } + return v; + } + + template + std::vector generate_random_norepetitions(size_t size, int min, int max, float bound = 0.45) { + // Rerurn repeatless vector with size = size in range(min, max) + std::uniform_int_distribution distribution(min, max); + std::uniform_real_distribution to_bound_dist(0, bound); + std::set repeatless; + std::vector v(size, 0); + std::vector res(size); + int i = 0; + int temp; + if (max - min >= int(size) - 1){ + while (repeatless.size() < size) { + temp = distribution(this->generator); + if (repeatless.find(temp) == repeatless.end()) { + repeatless.insert(temp); + v[i] = (float)temp; + i++; + } + } + for (size_t k = 0; k < v.size(); k++) { + v[k] += to_bound_dist(this->generator); + res[k] = static_cast(v[k]); + } + } else { + throw "Array size is bigger than size of range(min, max). Unable to generate array of unique integer numbers"; + } + return res; + } + + cldnn::memory::ptr get_mem(cldnn::layout l) { auto prim = engine.allocate_memory(l); tensor s = l.get_tensor(); if (l.data_type == data_types::bin) { - VF rnd_vec = generate_random_1d(s.count() / 32, min_random, max_random); + VF rnd_vec = generate_random(s.count() / 32, min_random, max_random); set_values(prim, rnd_vec); } else if (l.data_type == data_types::i8 || l.data_type == data_types::u8) { - VF rnd_vec = generate_random_1d(s.count(), min_random, max_random); + VF rnd_vec = generate_random(s.count(), min_random, max_random); set_values(prim, rnd_vec); } else if (l.data_type == data_types::f16) { - VF rnd_vec = generate_random_1d(s.count(), -1, 1); + VF rnd_vec = generate_random(s.count(), -1, 1); set_values(prim, rnd_vec); } else { - VF rnd_vec = generate_random_1d(s.count(), -1, 1); + VF rnd_vec = generate_random(s.count(), -1, 1); set_values(prim, rnd_vec); } @@ -156,17 +206,17 @@ public: auto prim = engine.allocate_memory(l); tensor s = l.get_tensor(); if (l.data_type == data_types::f32) { - VF rnd_vec = generate_random_norepetitions_1d(s.count(), min, max); + VF rnd_vec = generate_random_norepetitions(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::f16) { - VF rnd_vec = generate_random_norepetitions_1d(s.count(), min, max); + VF rnd_vec = generate_random_norepetitions(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::i8) { - VF rnd_vec = generate_random_norepetitions_1d(s.count(), min, max); + VF rnd_vec = generate_random_norepetitions(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::bin) { - VF rnd_vec = generate_random_norepetitions_1d(s.count(), min, max); + VF rnd_vec = generate_random_norepetitions(s.count(), min, max); set_values(prim, rnd_vec); } @@ -177,19 +227,19 @@ public: auto prim = engine.allocate_memory(l); tensor s = l.get_tensor(); if (l.data_type == data_types::f32) { - VF rnd_vec = generate_random_1d(s.count(), min, max); + VF rnd_vec = generate_random(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::f16) { - VF rnd_vec = generate_random_1d(s.count(), min, max); + VF rnd_vec = generate_random(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::i8) { - VF rnd_vec = generate_random_1d(s.count(), min, max); + VF rnd_vec = generate_random(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::u8) { - VF rnd_vec = generate_random_1d(s.count(), min, max); + VF rnd_vec = generate_random(s.count(), min, max); set_values(prim, rnd_vec); } else if (l.data_type == data_types::bin) { - VF rnd_vec = generate_random_1d(s.count() / 32, min, max); + VF rnd_vec = generate_random(s.count() / 32, min, max); set_values(prim, rnd_vec); } diff --git a/src/plugins/intel_gpu/tests/fusions/scatter_nd_update_fusion_test.cpp b/src/plugins/intel_gpu/tests/fusions/scatter_nd_update_fusion_test.cpp index c1436ace4d2..40f99df8141 100644 --- a/src/plugins/intel_gpu/tests/fusions/scatter_nd_update_fusion_test.cpp +++ b/src/plugins/intel_gpu/tests/fusions/scatter_nd_update_fusion_test.cpp @@ -71,10 +71,9 @@ public: template T generate_random_val(int min, int max, int k = 8) { - static std::default_random_engine generator(random_seed); // 1/k is the resolution of the floating point numbers std::uniform_int_distribution distribution(k * min, k * max); - T val = (T)distribution(generator); + T val = (T)distribution(this->generator); val /= k; return val; diff --git a/src/plugins/intel_gpu/tests/test_utils/test_utils.h b/src/plugins/intel_gpu/tests/test_utils/test_utils.h index 9d6e5099766..5b8f1d2d084 100644 --- a/src/plugins/intel_gpu/tests/test_utils/test_utils.h +++ b/src/plugins/intel_gpu/tests/test_utils/test_utils.h @@ -233,36 +233,6 @@ std::vector generate_random_1d(size_t a, int min, int max, int k = 8) { return v; } -template -std::vector generate_random_norepetitions_1d(size_t size, int min, int max, float bound = 0.45) { - // Rerurn repeatless vector with size = size in range(min, max) - static std::default_random_engine generator(random_seed); - std::uniform_int_distribution distribution(min, max); - std::uniform_real_distribution to_bound_dist(0, bound); - std::set repeatless; - std::vector v(size, 0); - std::vector res(size); - int i = 0; - int temp; - if (max - min >= int(size) - 1){ - while (repeatless.size() < size) { - temp = distribution(generator); - if (repeatless.find(temp) == repeatless.end()) { - repeatless.insert(temp); - v[i] = (float)temp; - i++; - } - } - for (size_t k = 0; k < v.size(); k++) { - v[k] += to_bound_dist(generator); - res[k] = static_cast(v[k]); - } - } else { - throw "Array size is bigger than size of range(min, max). Unable to generate array of unique integer numbers"; - } - return res; -} - template std::vector> generate_random_2d(size_t a, size_t b, int min, int max, int k = 8) { std::vector> v(a);