Skip to content

Commit

Permalink
release and relock on wrapper resize
Browse files Browse the repository at this point in the history
  • Loading branch information
YashasSamaga committed Mar 17, 2020
1 parent c48473d commit 034a43e
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
14 changes: 11 additions & 3 deletions modules/dnn/src/cuda4dnn/csl/memory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,14 +276,22 @@ namespace cv { namespace dnn { namespace cuda4dnn { namespace csl {

MemoryLockGuard& operator=(const MemoryLockGuard&) = delete;
MemoryLockGuard& operator=(MemoryLockGuard&& other) noexcept {
ptr = other.ptr;
other.ptr = nullptr;
if (&other != this) {
if(ptr != nullptr) {
/* cudaHostUnregister does not throw for a valid ptr */
CUDA4DNN_CHECK_CUDA(cudaHostUnregister(ptr));
}
ptr = other.ptr;
other.ptr = nullptr;
}
return *this;
}

~MemoryLockGuard() {
if(ptr != nullptr)
if(ptr != nullptr) {
/* cudaHostUnregister does not throw for a valid ptr */
CUDA4DNN_CHECK_CUDA(cudaHostUnregister(ptr));
}
}

private:
Expand Down
11 changes: 11 additions & 0 deletions modules/dnn/src/op_cuda.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,18 @@ namespace cv { namespace dnn {

auto numel = total(shape_);
if (numel > shared_block->device.size())
{
/* if the host memory was already page-locked, release it and register again with the new size */
shared_block->memGuard = cuda4dnn::csl::MemoryLockGuard();
try {
CV_Assert(shared_block->host.type() == CV_32F);
shared_block->memGuard = cuda4dnn::csl::MemoryLockGuard(shared_block->host.data, numel * sizeof(float));
} catch (...) {
/* a common reason for failure is that the host system (for example, a Jetson device) does not support it */
/* we ignore the failure as this is just an optimization and not a requirement */
}
shared_block->device.reset(numel);
}
}

static Ptr<BackendWrapper> create(Mat& m) {
Expand Down

0 comments on commit 034a43e

Please sign in to comment.