void Caffe::set_random_seed(const unsigned int seed) { if (Caffe::GetDefaultDeviceContext()->backend() == BACKEND_CUDA) { #ifdef USE_CUDA // Curand seed static bool g_curand_availability_logged = false; if (Get().curand_generator_) { CURAND_CHECK( curandSetPseudoRandomGeneratorSeed(curand_generator(), seed)); CURAND_CHECK(curandSetGeneratorOffset(curand_generator(), 0)); } else { if (!g_curand_availability_logged) { LOG(ERROR)<< "Curand not available. Skipping setting the curand seed."; g_curand_availability_logged = true; } } #endif // USE_CUDA } else { #ifdef USE_GREENTEA // TODO: Proper RNG and Seed for OpenCL #endif // USE_GREENTEA } // RNG seed Get().random_generator_.reset(new RNG(seed)); }
void Caffe::set_random_seed(uint64_t random_seed) { if (root_seed_.load() == Caffe::SEED_NOT_SET) { root_seed_.store(random_seed); } else if (random_seed == Caffe::SEED_NOT_SET) { return; // i.e. root solver was previously set to 0+ and there is no need to re-generate } #ifndef CPU_ONLY { // Curand seed std::lock_guard<std::mutex> lock(seed_mutex_); if (random_seed == Caffe::SEED_NOT_SET) { random_seed = cluster_seedgen(); } static bool g_curand_availability_logged = false; curandGenerator_t curand_generator_handle = curand_generator(); if (curand_generator_handle) { CURAND_CHECK(curandSetPseudoRandomGeneratorSeed(curand_generator_handle, random_seed)); CURAND_CHECK(curandSetGeneratorOffset(curand_generator_handle, 0)); } else if (!g_curand_availability_logged) { LOG(ERROR) << "Curand not available. Skipping setting the curand seed."; g_curand_availability_logged = true; } } #endif // RNG seed Get().random_generator_.reset(new RNG(random_seed)); }
void Caffe::set_random_seed(const unsigned int seed) { // Curand seed // Yangqing's note: simply setting the generator seed does not seem to // work on the tesla K20s, so I wrote the ugly reset thing below. if (Get().curand_generator_) { CURAND_CHECK(curandDestroyGenerator(curand_generator())); CURAND_CHECK(curandCreateGenerator(&Get().curand_generator_, CURAND_RNG_PSEUDO_DEFAULT)); CURAND_CHECK(curandSetPseudoRandomGeneratorSeed(curand_generator(), seed)); } else { LOG(ERROR) << "Curand not available. Skipping setting the curand seed."; } // RNG seed Get().random_generator_.reset(new RNG(seed)); }
void Engine::set_random_seed(const unsigned int seed) { // Curand seed static bool g_curand_availability_logged = false; if (Get().curand_generator_) { CURAND_CHECK(curandSetPseudoRandomGeneratorSeed(curand_generator(), seed)); CURAND_CHECK(curandSetGeneratorOffset(curand_generator(), 0)); } else { if (!g_curand_availability_logged) { LOG(ERROR) << "Curand not available. Skipping setting the curand seed."; g_curand_availability_logged = true; } } // RNG seed Get().random_generator_.reset(new RNG(seed)); }