示例#1
0
SyncedMemory::~SyncedMemory() {
#ifndef CPU_ONLY
  if (gpu_ptr_) {
    if (device_context_->backend() == Backend::BACKEND_CUDA) {
#ifdef USE_CUDA
      // Free device memory
      cudaFree(gpu_ptr_);
      gpu_ptr_ = nullptr;
      device_context_->DecreaseMemoryUsage(size_);
#endif  // USE_CUDA
    } else {
#ifdef USE_GREENTEA
      // Free device memory
      viennacl::ocl::context ctx = viennacl::ocl::get_context(
          device_context_->id());
      ctx.get_queue().finish();
      CHECK_EQ(CL_SUCCESS, clReleaseMemObject(cl_gpu_mem_))
          << "OpenCL memory corruption";
      gpu_ptr_ = nullptr;
      cl_gpu_mem_ = nullptr;
      ctx.get_queue().finish();
      device_context_->DecreaseMemoryUsage(size_);
#endif  // USE_GREENTEA
    }
  }
#endif  // !CPU_ONLY
  // Free host memory
  if (cpu_ptr_ && own_cpu_data_) {
    CaffeFreeHost(cpu_ptr_);
    cpu_ptr_ = nullptr;
  }
}
inline void SyncedMemory::to_cpu() {
	if(cpu_ptr_!=NULL)
	{
		CaffeFreeHost(cpu_ptr_);
	}
	
	
  switch (head_) {
  case UNINITIALIZED:
    CaffeMallocHost(&cpu_ptr_, size_);
    caffe_memset(size_, 0, cpu_ptr_);
    head_ = HEAD_AT_CPU;
    own_cpu_data_ = true;
    break;
  case HEAD_AT_GPU:
#ifndef CPU_ONLY
    if (cpu_ptr_ == NULL) {
      CaffeMallocHost(&cpu_ptr_, size_);
      own_cpu_data_ = true;
    }
    caffe_gpu_memcpy(size_, gpu_ptr_, cpu_ptr_);
    head_ = SYNCED;
#else
    NO_GPU;
#endif
    break;
  case HEAD_AT_CPU:
  case SYNCED:
    break;
  }
}
示例#3
0
SyncedMemory::~SyncedMemory() {
  if (cpu_ptr_) {
    CaffeFreeHost(cpu_ptr_);
  }

  if (gpu_ptr_) {
  }
}
示例#4
0
文件: syncedmem.cpp 项目: AlOa/caffe
SyncedMemory::~SyncedMemory() {
  if (cpu_ptr_) {
    CaffeFreeHost(cpu_ptr_);
  }

  if (gpu_ptr_) {
    CUDA_CHECK(cudaFree(gpu_ptr_));
  }
}
示例#5
0
void SyncedMemory::set_cpu_data(void* data) {
  CHECK(data);
  if (own_cpu_data_) {
    CaffeFreeHost(cpu_ptr_);
  }
  cpu_ptr_ = data;
  head_ = HEAD_AT_CPU;
  own_cpu_data_ = false;
}
示例#6
0
SyncedMemory::~SyncedMemory() {
  if (cpu_ptr_ && own_cpu_data_) {
    CaffeFreeHost(cpu_ptr_);
  }

#ifndef CPU_ONLY
  if (gpu_ptr_) {
    CUDA_CHECK(cudaFree(gpu_ptr_));
  }
#endif  // CPU_ONLY
}
SyncedMemory::~SyncedMemory() {
  if (cpu_ptr_ && own_cpu_data_) {
    CaffeFreeHost(cpu_ptr_);
	cpu_ptr_ = NULL;
  }

  if (gpu_ptr_) {
    CUDA_CHECK(cudaFree(gpu_ptr_));
	gpu_ptr_ = NULL;
  }
}
示例#8
0
SyncedMemory::~SyncedMemory() {
  if (cpu_ptr_ && own_cpu_data_) {
    CaffeFreeHost(cpu_ptr_, cpu_malloc_use_cuda_);
  }

#ifndef CPU_ONLY
  if (gpu_ptr_ && own_gpu_data_) {
    int initial_device;
    cudaGetDevice(&initial_device);
    if (gpu_device_ != -1) {
      CUDA_CHECK(cudaSetDevice(gpu_device_));
    }
    CUDA_CHECK(cudaFree(gpu_ptr_));
    cudaSetDevice(initial_device);
  }
#endif  // CPU_ONLY
}
示例#9
0
// 析构函数就是释放内存  
SyncedMemory::~SyncedMemory() {  
  if (cpu_ptr_ && own_cpu_data_) {  
    CaffeFreeHost(cpu_ptr_, 0);  
  }  
  
#ifndef CPU_ONLY// 只要不是定义的CPU_ONLY的编译模式  
  if (gpu_ptr_ && own_gpu_data_) {  
    int initial_device;  
    // 获取可用设备  
    cudaGetDevice(&initial_device);  
    if (gpu_device_ != -1) {  
        // 当前所使用的设备  
      CUDA_CHECK(cudaSetDevice(gpu_device_));  
    }  
    // 释放当前  
    CUDA_CHECK(cudaFree(gpu_ptr_));  
    cudaSetDevice(initial_device);  
  }  
#endif  // CPU_ONLY  
}  
示例#10
0
SyncedMemory::~SyncedMemory() {
  if (cpu_ptr_ && own_cpu_data_) {
    CaffeFreeHost(cpu_ptr_, cpu_malloc_use_cuda_);
  }
}