| @@ -86,20 +86,10 @@ Status ShuffleOp::SelfReset() { | |||
| // epoch. | |||
| // If ReshuffleEachEpoch is true, then the first epoch uses the given seed, | |||
| // and all subsequent epochs will then reset the seed based on random device. | |||
| if (!reshuffle_each_epoch_) { | |||
| rng_ = std::mt19937_64(shuffle_seed_); | |||
| } else { | |||
| #if defined(_WIN32) || defined(_WIN64) | |||
| unsigned int number; | |||
| rand_s(&number); | |||
| std::mt19937 random_device{static_cast<uint32_t>(number)}; | |||
| #else | |||
| std::random_device random_device("/dev/urandom"); | |||
| #endif | |||
| std::uniform_int_distribution<int32_t> distribution(0, std::numeric_limits<int32_t>::max()); | |||
| shuffle_seed_ = distribution(random_device); | |||
| rng_ = std::mt19937_64(shuffle_seed_); | |||
| if (reshuffle_each_epoch_) { | |||
| shuffle_seed_ = GetNewSeed(); | |||
| } | |||
| rng_ = std::mt19937_64(shuffle_seed_); | |||
| shuffle_buffer_ = std::make_unique<TensorTable>(); | |||
| buffer_counter_ = 0; | |||
| shuffle_last_row_idx_ = 0; | |||
| @@ -12,5 +12,4 @@ add_library(utils OBJECT | |||
| status.cc | |||
| path.cc | |||
| wait_post.cc | |||
| sig_handler.cc | |||
| random.cc) | |||
| sig_handler.cc) | |||
| @@ -1,54 +0,0 @@ | |||
| /** | |||
| * Copyright 2019 Huawei Technologies Co., Ltd | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| #ifndef DATASET_UTIL_RANDOM_H_ | |||
| #define DATASET_UTIL_RANDOM_H_ | |||
| #include "dataset/util/random.h" | |||
| #if defined(_WIN32) || defined(_WIn64) | |||
| #include <stdlib.h> | |||
| #endif | |||
| #include <limits> | |||
| #include <memory> | |||
| #include <random> | |||
| #include <string> | |||
| #include "dataset/core/config_manager.h" | |||
| #include "dataset/core/global_context.h" | |||
| #include "dataset/util/status.h" | |||
| namespace mindspore { | |||
| namespace dataset { | |||
| uint32_t GetSeed() { | |||
| uint32_t seed = GlobalContext::config_manager()->seed(); | |||
| if (seed == std::mt19937::default_seed) { | |||
| #if defined(_WIN32) || defined(_WIN64) | |||
| unsigned int number; | |||
| rand_s(&number); | |||
| std::mt19937 random_device{static_cast<uint32_t>(number)}; | |||
| #else | |||
| std::random_device random_device("/dev/urandom"); | |||
| #endif | |||
| std::uniform_int_distribution<uint32_t> distribution(0, std::numeric_limits<uint32_t>::max()); | |||
| seed = distribution(random_device); | |||
| } | |||
| return seed; | |||
| } | |||
| } // namespace dataset | |||
| } // namespace mindspore | |||
| #endif // DATASET_UTIL_RANDOM_H_ | |||
| @@ -15,9 +15,45 @@ | |||
| */ | |||
| #ifndef DATASET_UTIL_RANDOM_H_ | |||
| #define DATASET_UTIL_RANDOM_H_ | |||
| #if defined(_WIN32) || defined(_WIN64) | |||
| #include <stdlib.h> | |||
| #endif | |||
| #include <limits> | |||
| #include <memory> | |||
| #include <random> | |||
| #include <string> | |||
| #include "dataset/core/config_manager.h" | |||
| #include "dataset/core/global_context.h" | |||
| namespace mindspore { | |||
| namespace dataset { | |||
| uint32_t GetSeed(); | |||
| inline std::mt19937 GetRandomDevice() { | |||
| #if defined(_WIN32) || defined(_WIN64) | |||
| unsigned int number; | |||
| rand_s(&number); | |||
| std::mt19937 random_device{static_cast<uint32_t>(number)}; | |||
| #else | |||
| std::mt19937 random_device{std::random_device("/dev/urandom")()}; | |||
| #endif | |||
| return random_device; | |||
| } | |||
| inline uint32_t GetNewSeed() { | |||
| std::mt19937 random_device = GetRandomDevice(); | |||
| std::uniform_int_distribution<uint32_t> distribution(0, std::numeric_limits<uint32_t>::max()); | |||
| return distribution(random_device); | |||
| } | |||
| inline uint32_t GetSeed() { | |||
| uint32_t seed = GlobalContext::config_manager()->seed(); | |||
| if (seed == std::mt19937::default_seed) { | |||
| seed = GetNewSeed(); | |||
| } | |||
| return seed; | |||
| } | |||
| } // namespace dataset | |||
| } // namespace mindspore | |||
| @@ -22,8 +22,8 @@ | |||
| #include <stdlib.h> | |||
| #endif | |||
| #include <unistd.h> | |||
| #include <random> | |||
| #include "dataset/util/circular_pool.h" | |||
| #include "dataset/util/random.h" | |||
| #include "dataset/util/task_manager.h" | |||
| #define SLOT_TASK_MGR 0 | |||
| @@ -50,14 +50,8 @@ int Services::GetLWP() { return syscall(SYS_gettid); } | |||
| std::string Services::GetUniqueID() { | |||
| const std::string kStr = "abcdefghijklmnopqrstuvwxyz0123456789"; | |||
| #if defined(_WIN32) || defined(_WIN64) | |||
| unsigned int number; | |||
| rand_s(&number); | |||
| std::mt19937 gen{static_cast<uint32_t>(number)}; | |||
| #else | |||
| std::mt19937 gen{std::random_device{"/dev/urandom"}()}; | |||
| #endif | |||
| std::uniform_int_distribution<> dist(0, kStr.size() - 1); | |||
| std::mt19937 gen = GetRandomDevice(); | |||
| std::uniform_int_distribution<uint32_t> dist(0, kStr.size() - 1); | |||
| char buffer[UNIQUEID_LEN]; | |||
| for (int i = 0; i < UNIQUEID_LEN; i++) { | |||
| buffer[i] = kStr[dist(gen)]; | |||