From 9ce13ba8927959dd1ff5d03d0ef12d017a09e9f5 Mon Sep 17 00:00:00 2001 From: Tea Date: Mon, 9 Nov 2015 16:02:46 +0800 Subject: [PATCH] Provide cross-platform seed generation --- Makefile | 2 +- cmake/Dependencies.cmake | 2 +- src/caffe/common.cpp | 22 +++++----------------- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 3dc76ae5697..e21c3e85f9f 100644 --- a/Makefile +++ b/Makefile @@ -170,7 +170,7 @@ ifneq ($(CPU_ONLY), 1) LIBRARIES := cudart cublas curand endif -LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 +LIBRARIES += glog gflags protobuf boost_system boost_filesystem boost_random m hdf5_hl hdf5 # handle IO dependencies USE_LEVELDB ?= 1 diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 51a803c1a73..4ed3472cf3b 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -2,7 +2,7 @@ set(Caffe_LINKER_LIBS "") # ---[ Boost -find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem) +find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem random) include_directories(SYSTEM ${Boost_INCLUDE_DIR}) list(APPEND Caffe_LINKER_LIBS ${Boost_LIBRARIES}) diff --git a/src/caffe/common.cpp b/src/caffe/common.cpp index 299d67d4bec..775dac9de77 100644 --- a/src/caffe/common.cpp +++ b/src/caffe/common.cpp @@ -1,3 +1,5 @@ +#include +#include #include #include #include @@ -21,25 +23,11 @@ Caffe& Caffe::Get() { // random seeding int64_t cluster_seedgen(void) { - int64_t s, seed, pid; - FILE* f = fopen("/dev/urandom", "rb"); - if (f && fread(&seed, 1, sizeof(seed), f) == sizeof(seed)) { - fclose(f); - return seed; - } - - LOG(INFO) << "System entropy source not available, " - "using fallback algorithm to generate seed instead."; - if (f) - fclose(f); - - pid = getpid(); - s = time(NULL); - seed = std::abs(((s * 181) * ((pid - 83) * 359)) % 104729); - return seed; + boost::random::random_device rng; + boost::random::uniform_int_distribution dist; + return dist(rng); } - void GlobalInit(int* pargc, char*** pargv) { // Google flags. ::gflags::ParseCommandLineFlags(pargc, pargv, true);