| @@ -13,6 +13,9 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format") | |||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") | ||||
| ############################# Options ################################ | ############################# Options ################################ | ||||
| if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") | |||||
| add_definitions(-D _CRT_RAND_S) | |||||
| endif () | |||||
| if (ENABLE_GPUQUE) | if (ENABLE_GPUQUE) | ||||
| add_definitions(-D ENABLE_GPUQUE) | add_definitions(-D ENABLE_GPUQUE) | ||||
| message(STATUS "GPU queue is enabled") | message(STATUS "GPU queue is enabled") | ||||
| @@ -65,9 +65,6 @@ MapOp::MapOp(const std::vector<std::string> &in_col_names, const std::vector<std | |||||
| tfuncs_(std::move(tensor_funcs)), | tfuncs_(std::move(tensor_funcs)), | ||||
| in_columns_(in_col_names), | in_columns_(in_col_names), | ||||
| out_columns_(out_col_names), | out_columns_(out_col_names), | ||||
| #if defined(_WIN32) || defined(_WIN64) | |||||
| eof_worker_id_(0), | |||||
| #endif | |||||
| perf_mode_(perf_mode) { | perf_mode_(perf_mode) { | ||||
| // If caller didn't specify the out_col_names, assume they are same as the in_columns. | // If caller didn't specify the out_col_names, assume they are same as the in_columns. | ||||
| if (out_columns_.empty() || out_columns_[0].empty()) { | if (out_columns_.empty() || out_columns_[0].empty()) { | ||||
| @@ -123,17 +120,6 @@ Status MapOp::operator()() { | |||||
| RETURN_IF_NOT_OK(child_[0]->GetNextBuffer(&buff, 0)); | RETURN_IF_NOT_OK(child_[0]->GetNextBuffer(&buff, 0)); | ||||
| is_eof = buff->eof(); | is_eof = buff->eof(); | ||||
| RETURN_IF_NOT_OK(local_queues_[que_id]->Add(std::move(buff))); | RETURN_IF_NOT_OK(local_queues_[que_id]->Add(std::move(buff))); | ||||
| #if defined(_WIN32) || defined(_WIN64) | |||||
| if (is_eof) { | |||||
| eof_worker_id_ = que_id; | |||||
| for (int32_t id = 0; id < num_workers_; id++) { | |||||
| if (id != eof_worker_id_) { | |||||
| auto eof_buffer = std::make_unique<DataBuffer>(0, DataBuffer::kDeBFlagEOF); | |||||
| RETURN_IF_NOT_OK(local_queues_[id]->Add(std::move(eof_buffer))); | |||||
| } | |||||
| } | |||||
| } | |||||
| #endif | |||||
| que_id = (que_id + 1) % num_workers_; | que_id = (que_id + 1) % num_workers_; | ||||
| } | } | ||||
| } | } | ||||
| @@ -173,14 +159,6 @@ Status MapOp::WorkerEntry(int32_t worker_id) { | |||||
| continue; | continue; | ||||
| } else if (in_buffer->eof()) { | } else if (in_buffer->eof()) { | ||||
| // Calling base class EofReceived to forward eof buffer. | // Calling base class EofReceived to forward eof buffer. | ||||
| #if defined(_WIN32) || defined(_Win64) | |||||
| if (perf_mode_) { | |||||
| if (eof_worker_id_ == worker_id) { | |||||
| RETURN_IF_NOT_OK(EofReceived(worker_id)); | |||||
| } | |||||
| break; | |||||
| } | |||||
| #endif | |||||
| RETURN_IF_NOT_OK(EofReceived(worker_id)); | RETURN_IF_NOT_OK(EofReceived(worker_id)); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -193,10 +193,6 @@ class MapOp : public ParallelOp { | |||||
| // cause additional blocking because pop calls to Connector from the threads are synchronized to enforce the order. | // cause additional blocking because pop calls to Connector from the threads are synchronized to enforce the order. | ||||
| bool perf_mode_; | bool perf_mode_; | ||||
| #if defined(_WIN32) || defined(_WIN64) | |||||
| // EOF worker id is only work on Performance mode, to record the worker id of queue which gets EOF | |||||
| int32_t eof_worker_id_; | |||||
| #endif | |||||
| // Private function for worker/thread to loop continuously. It comprises the main | // Private function for worker/thread to loop continuously. It comprises the main | ||||
| // logic of MapOp: getting the data from previous Op, validating user specified column names, | // logic of MapOp: getting the data from previous Op, validating user specified column names, | ||||
| // applying a list of TensorOps to each of the data, process the results and then | // applying a list of TensorOps to each of the data, process the results and then | ||||
| @@ -13,6 +13,9 @@ | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #if defined(_WIN32) || defined(_WIN64) | |||||
| #include <stdlib.h> | |||||
| #endif | |||||
| #include <securec.h> | #include <securec.h> | ||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <chrono> | #include <chrono> | ||||
| @@ -86,7 +89,9 @@ Status ShuffleOp::SelfReset() { | |||||
| rng_ = std::mt19937_64(shuffle_seed_); | rng_ = std::mt19937_64(shuffle_seed_); | ||||
| } else { | } else { | ||||
| #if defined(_WIN32) || defined(_WIN64) | #if defined(_WIN32) || defined(_WIN64) | ||||
| std::random_device random_device; | |||||
| unsigned int number; | |||||
| rand_s(&number); | |||||
| std::mt19937 random_device{static_cast<uint32_t>(number)}; | |||||
| #else | #else | ||||
| std::random_device random_device("/dev/urandom"); | std::random_device random_device("/dev/urandom"); | ||||
| #endif | #endif | ||||
| @@ -18,6 +18,9 @@ | |||||
| #include "dataset/util/random.h" | #include "dataset/util/random.h" | ||||
| #if defined(_WIN32) || defined(_WIn64) | |||||
| #include <stdlib.h> | |||||
| #endif | |||||
| #include <limits> | #include <limits> | ||||
| #include <memory> | #include <memory> | ||||
| #include <random> | #include <random> | ||||
| @@ -33,7 +36,9 @@ uint32_t GetSeed() { | |||||
| uint32_t seed = GlobalContext::config_manager()->seed(); | uint32_t seed = GlobalContext::config_manager()->seed(); | ||||
| if (seed == std::mt19937::default_seed) { | if (seed == std::mt19937::default_seed) { | ||||
| #if defined(_WIN32) || defined(_WIN64) | #if defined(_WIN32) || defined(_WIN64) | ||||
| std::random_device random_device; | |||||
| unsigned int number; | |||||
| rand_s(&number); | |||||
| std::mt19937 random_device{static_cast<uint32_t>(number)}; | |||||
| #else | #else | ||||
| std::random_device random_device("/dev/urandom"); | std::random_device random_device("/dev/urandom"); | ||||
| #endif | #endif | ||||
| @@ -18,6 +18,8 @@ | |||||
| #include <limits.h> | #include <limits.h> | ||||
| #if !defined(_WIN32) && !defined(_WIN64) | #if !defined(_WIN32) && !defined(_WIN64) | ||||
| #include <sys/syscall.h> | #include <sys/syscall.h> | ||||
| #else | |||||
| #include <stdlib.h> | |||||
| #endif | #endif | ||||
| #include <unistd.h> | #include <unistd.h> | ||||
| #include <random> | #include <random> | ||||
| @@ -49,7 +51,9 @@ int Services::GetLWP() { return syscall(SYS_gettid); } | |||||
| std::string Services::GetUniqueID() { | std::string Services::GetUniqueID() { | ||||
| const std::string kStr = "abcdefghijklmnopqrstuvwxyz0123456789"; | const std::string kStr = "abcdefghijklmnopqrstuvwxyz0123456789"; | ||||
| #if defined(_WIN32) || defined(_WIN64) | #if defined(_WIN32) || defined(_WIN64) | ||||
| std::mt19937 gen{std::random_device{}()}; | |||||
| unsigned int number; | |||||
| rand_s(&number); | |||||
| std::mt19937 gen{static_cast<uint32_t>(number)}; | |||||
| #else | #else | ||||
| std::mt19937 gen{std::random_device{"/dev/urandom"}()}; | std::mt19937 gen{std::random_device{"/dev/urandom"}()}; | ||||
| #endif | #endif | ||||