[GPU] Use hash of test name for random generator initialization (#17213)

This commit is contained in:
Vladimir Paramuzov authored and GitHub committed 2023-04-26 12:52:38 +04:00
1 parent 6389f423bf
commit ce5f65af14
3 files changed
+64 -45

No files matched your search

@@ -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<std::string>{}(suite_name);
generator = std::default_random_engine{static_cast<uint32_t>(seed)};
cfg_fused = get_test_default_config(engine);
cfg_not_fused = get_test_default_config(engine);
@@ -107,20 +114,63 @@ public:
}
}
template<typename ReturnType>
std::vector<ReturnType> 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<int> distribution(k * min, k * max);
std::vector<ReturnType> v(a);
for (size_t i = 0; i < a; ++i) {
v[i] = (ReturnType)distribution(this->generator);
v[i] /= k;
}
return v;
}
template<typename ReturnType>
std::vector<ReturnType> 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<int> distribution(min, max);
std::uniform_real_distribution<float> to_bound_dist(0, bound);
std::set<int> repeatless;
std::vector<float> v(size, 0);
std::vector<ReturnType> 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<ReturnType>(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<int32_t> rnd_vec = generate_random_1d<int32_t>(s.count() / 32, min_random, max_random);
VF<int32_t> rnd_vec = generate_random<int32_t>(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<uint8_t> rnd_vec = generate_random_1d<uint8_t>(s.count(), min_random, max_random);
VF<uint8_t> rnd_vec = generate_random<uint8_t>(s.count(), min_random, max_random);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::f16) {
VF<uint16_t> rnd_vec = generate_random_1d<uint16_t>(s.count(), -1, 1);
VF<uint16_t> rnd_vec = generate_random<uint16_t>(s.count(), -1, 1);
set_values(prim, rnd_vec);
} else {
VF<float> rnd_vec = generate_random_1d<float>(s.count(), -1, 1);
VF<float> rnd_vec = generate_random<float>(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<float> rnd_vec = generate_random_norepetitions_1d<float>(s.count(), min, max);
VF<float> rnd_vec = generate_random_norepetitions<float>(s.count(), min, max);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::f16) {
VF<FLOAT16> rnd_vec = generate_random_norepetitions_1d<FLOAT16>(s.count(), min, max);
VF<FLOAT16> rnd_vec = generate_random_norepetitions<FLOAT16>(s.count(), min, max);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::i8) {
VF<int8_t> rnd_vec = generate_random_norepetitions_1d<int8_t>(s.count(), min, max);
VF<int8_t> rnd_vec = generate_random_norepetitions<int8_t>(s.count(), min, max);
set_values(prim, rnd_vec);
}
else if (l.data_type == data_types::bin) {
VF<int32_t> rnd_vec = generate_random_norepetitions_1d<int32_t>(s.count(), min, max);
VF<int32_t> rnd_vec = generate_random_norepetitions<int32_t>(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<float> rnd_vec = generate_random_1d<float>(s.count(), min, max);
VF<float> rnd_vec = generate_random<float>(s.count(), min, max);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::f16) {
VF<FLOAT16> rnd_vec = generate_random_1d<FLOAT16>(s.count(), min, max);
VF<FLOAT16> rnd_vec = generate_random<FLOAT16>(s.count(), min, max);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::i8) {
VF<int8_t> rnd_vec = generate_random_1d<int8_t>(s.count(), min, max);
VF<int8_t> rnd_vec = generate_random<int8_t>(s.count(), min, max);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::u8) {
VF<uint8_t> rnd_vec = generate_random_1d<uint8_t>(s.count(), min, max);
VF<uint8_t> rnd_vec = generate_random<uint8_t>(s.count(), min, max);
set_values(prim, rnd_vec);
} else if (l.data_type == data_types::bin) {
VF<int32_t> rnd_vec = generate_random_1d<int32_t>(s.count() / 32, min, max);
VF<int32_t> rnd_vec = generate_random<int32_t>(s.count() / 32, min, max);
set_values(prim, rnd_vec);
}
@@ -71,10 +71,9 @@ public:
template<typename T>
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<int> distribution(k * min, k * max);
T val = (T)distribution(generator);
T val = (T)distribution(this->generator);
val /= k;
return val;
@@ -233,36 +233,6 @@ std::vector<T> generate_random_1d(size_t a, int min, int max, int k = 8) {
return v;
}
template<typename Type>
std::vector<Type> 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<int> distribution(min, max);
std::uniform_real_distribution<float> to_bound_dist(0, bound);
std::set<int> repeatless;
std::vector<float> v(size, 0);
std::vector<Type> 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<Type>(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<typename T>
std::vector<std::vector<T>> generate_random_2d(size_t a, size_t b, int min, int max, int k = 8) {
std::vector<std::vector<T>> v(a);