Delete caffe2_cuda_full_device_control (#14283)
authorEdward Yang <ezyang@fb.com>
Fri, 30 Nov 2018 02:31:00 +0000 (18:31 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Fri, 30 Nov 2018 02:33:22 +0000 (18:33 -0800)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/14283

According to Yangqing, this code was only used by us to do some end-to-end
performance experiments on the impact of cudaSetDevice and cudaGetDevice.  Now
that the frameworks are merged, there are a lot of bare calls to those functions
which are not covered by this flag.  It doesn't seem like a priority to restore
this functionality, so I am going to delete it for now.  If you want to bring
it back, you'll have to make all get/set calls go through this particular
interfaces.

Reviewed By: dzhulgakov

Differential Revision: D13156472

fbshipit-source-id: 4c6d2cc89ab5ae13f7c816f43729b577e1bd985c

caffe2/core/common_gpu.cc
caffe2/core/context_gpu_test.cc

index f31fec2..85e0200 100644 (file)
 #include "caffe2/core/init.h"
 #include "caffe2/core/logging.h"
 
-C10_DEFINE_bool(
-    caffe2_cuda_full_device_control,
-    false,
-    "If true, assume all the cudaSetDevice and cudaGetDevice calls will be "
-    "controlled by Caffe2, and non-Caffe2 code will ensure that the entry and "
-    "exit point has the same cuda device. Under the hood, Caffe2 will use "
-    "thread local variables to cache the device, in order to speed up set and "
-    "get device calls. This is an experimental feature that may have non "
-    "trivial side effects, so use it with care and only enable it if you are "
-    "absolutely sure. Also, this flag should not be changed after the program "
-    "initializes.");
-
 namespace caffe2 {
 
 int NumCudaDevices() {
@@ -89,8 +77,6 @@ int NumCudaDevices() {
 
 namespace {
 int gDefaultGPUID = 0;
-// Only used when FLAGS_caffe2_cuda_full_device_control is set true.
-thread_local int gCurrentDevice = -1;
 }  // namespace
 
 void SetDefaultGPUID(const int deviceid) {
@@ -108,27 +94,13 @@ void SetDefaultGPUID(const int deviceid) {
 int GetDefaultGPUID() { return gDefaultGPUID; }
 
 int CaffeCudaGetDevice() {
-  if (FLAGS_caffe2_cuda_full_device_control) {
-    if (gCurrentDevice < 0) {
-      CUDA_ENFORCE(cudaGetDevice(&gCurrentDevice));
-    }
-    return gCurrentDevice;
-  } else {
-    int gpu_id = 0;
-    CUDA_ENFORCE(cudaGetDevice(&gpu_id));
-    return gpu_id;
-  }
+  int gpu_id = 0;
+  CUDA_ENFORCE(cudaGetDevice(&gpu_id));
+  return gpu_id;
 }
 
 void CaffeCudaSetDevice(const int id) {
-  if (FLAGS_caffe2_cuda_full_device_control) {
-    if (gCurrentDevice != id) {
-      CUDA_ENFORCE(cudaSetDevice(id));
-    }
-    gCurrentDevice = id;
-  } else {
-    CUDA_ENFORCE(cudaSetDevice(id));
-  }
+  CUDA_ENFORCE(cudaSetDevice(id));
 }
 
 int GetGPUIDForPointer(const void* ptr) {
index da11789..9960e6a 100644 (file)
@@ -7,8 +7,6 @@
 #include "caffe2/core/context_gpu.h"
 #include <gtest/gtest.h>
 
-C10_DECLARE_bool(caffe2_cuda_full_device_control);
-
 namespace caffe2 {
 
 TEST(CUDATest, HasCudaRuntime) {
@@ -35,20 +33,6 @@ TEST(CUDAContextTest, TestSetGetDeviceWithoutCaffeMode) {
   }
 }
 
-TEST(CUDAContextTest, TestSetGetDeviceWithCaffeMode) {
-  // For a while, set full device control to be true.
-  FLAGS_caffe2_cuda_full_device_control = true;
-  for (int i = 0; i < NumCudaDevices(); ++i) {
-    CaffeCudaSetDevice(i);
-    EXPECT_EQ(CaffeCudaGetDevice(), i);
-  }
-  for (int i = NumCudaDevices() - 1; i >= 0; --i) {
-    CaffeCudaSetDevice(i);
-    EXPECT_EQ(CaffeCudaGetDevice(), i);
-  }
-  FLAGS_caffe2_cuda_full_device_control = false;
-}
-
 TEST(CUDAContextTest, MemoryPoolAllocateDealloc) {
   if (!HasCudaGPU())
     return;