summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7b9c799)
raw | patch | inline | side by side (parent: 7b9c799)
author | Sergei Nikolaev <snikolaev@nvidia.com> | |
Sun, 21 Jan 2018 04:25:10 +0000 (20:25 -0800) | ||
committer | Sergei Nikolaev <snikolaev@nvidia.com> | |
Sun, 21 Jan 2018 04:25:10 +0000 (20:25 -0800) |
include/caffe/common.hpp | patch | blob | history | |
src/caffe/blob.cpp | patch | blob | history | |
src/caffe/common.cpp | patch | blob | history |
index 88ecfbed8fa05abc1a02bf58576143d462123283..b12356f94fda911ceabf0c193655a715832ddb27 100644 (file)
--- a/include/caffe/common.hpp
+++ b/include/caffe/common.hpp
if (mode_ == mode) {
return;
}
- std::lock_guard<std::mutex> lock(caffe_mutex_);
- DLOG(INFO) << "Caffe " << " old mode "
- << (mode_ == Caffe::GPU ? "GPU" : "CPU") << " new mode "
- << (mode == Caffe::GPU ? "GPU" : "CPU");
- mode_ = mode;
+ {
+ std::lock_guard<std::mutex> lock(caffe_mutex_);
+ DLOG(INFO) << "Caffe " << " old mode "
+ << (mode_ == Caffe::GPU ? "GPU" : "CPU") << " new mode "
+ << (mode == Caffe::GPU ? "GPU" : "CPU");
+ mode_ = mode;
+ }
+ Get().init();
}
// Next seed. It's deterministic if root seed is already set.
static uint64_t next_seed();
// The private constructor to avoid duplicate instantiation.
Caffe();
+ void init(); // when Brew mode changes
void set_random_seed_int(uint64_t random_seed);
DISABLE_COPY_MOVE_AND_ASSIGN(Caffe);
diff --git a/src/caffe/blob.cpp b/src/caffe/blob.cpp
index 4d610aef4f6eadd6931d67542200ca625a75fa2a..6695333b429e69722ff33e39a42d39648757d83a 100644 (file)
--- a/src/caffe/blob.cpp
+++ b/src/caffe/blob.cpp
CUDNN_CHECK(cudnnTransformTensor(handle,
cudnn::one(src_type), src_desc, src->gpu_data(),
cudnn::zero(dst_type), dst_desc, dst->mutable_gpu_data(false)));
- CUDA_CHECK(cudaStreamSynchronize(Caffe::thread_stream()));
+ CUDA_CHECK(cudaStreamSynchronize(Caffe::thread_stream(group)));
CUDNN_CHECK(cudnnDestroyTensorDescriptor(src_desc));
CUDNN_CHECK(cudnnDestroyTensorDescriptor(dst_desc));
}
diff --git a/src/caffe/common.cpp b/src/caffe/common.cpp
index 63f6966ca76c2bcb5a5d9c25f6fd7938edda7196..8f8817be31c7c40b837c014c24bd107ebc7aaeae 100644 (file)
--- a/src/caffe/common.cpp
+++ b/src/caffe/common.cpp
std::uint64_t utid = lwp_dev_id();
std::lock_guard<std::mutex> lock(caffe_mutex_);
// ...and Brew mode too
- std::int64_t tid = mode_ == GPU ?
- static_cast<std::int64_t>(utid) : - static_cast<std::int64_t>(utid);
+ std::int64_t tid = //mode_ == GPU ?
+ static_cast<std::int64_t>(utid);// : - static_cast<std::int64_t>(utid);
auto it = thread_instance_map_.find(tid);
if (it != thread_instance_map_.end()) {
return *it->second.get();
if (random_seed == Caffe::SEED_NOT_SET) {
random_seed = cluster_seedgen();
}
+ init();
CURAND_CHECK(curandSetPseudoRandomGeneratorSeed(curand_generator_, random_seed));
CURAND_CHECK(curandSetGeneratorOffset(curand_generator_, 0));
}
random_generator_(),
root_solver_(true),
device_(current_device()) {
- if (mode_ == GPU) {
+ init();
+}
+
+void Caffe::init() {
+ if (mode_ == GPU && curand_generator_ == nullptr) {
CURAND_CHECK_ARG(curandCreateGenerator(&curand_generator_, CURAND_RNG_PSEUDO_DEFAULT),
current_device());
CURAND_CHECK_ARG(curandSetPseudoRandomGeneratorSeed(curand_generator_, cluster_seedgen()),