Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
D
dlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟尚武
dlib
Commits
10480cb9
Commit
10480cb9
authored
Oct 19, 2015
by
Davis King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Hid the cuDNN context in a thread local variable so the user doesn't
need to deal with it.
parent
d63c4682
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
66 deletions
+28
-66
cudnn_dlibapi.cpp
dlib/dnn/cudnn_dlibapi.cpp
+24
-24
cudnn_dlibapi.h
dlib/dnn/cudnn_dlibapi.h
+4
-42
No files found.
dlib/dnn/cudnn_dlibapi.cpp
View file @
10480cb9
...
...
@@ -36,23 +36,36 @@ namespace dlib
}
}
// ------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------
c
udnn_context
::
cudnn_context
()
:
handle
(
nullptr
)
c
lass
cudnn_context
{
cudnnHandle_t
h
;
check
(
cudnnCreate
(
&
h
));
handle
=
h
;
}
public
:
// not copyable
cudnn_context
(
const
cudnn_context
&
)
=
delete
;
cudnn_context
&
operator
=
(
const
cudnn_context
&
)
=
delete
;
cudnn_context
::~
cudnn_context
()
{
if
(
handle
)
cudnn_context
()
{
cudnnDestroy
((
cudnnHandle_t
)
handle
);
handle
=
nullptr
;
check
(
cudnnCreate
(
&
handle
));
}
~
cudnn_context
()
{
cudnnDestroy
(
handle
);
}
cudnnHandle_t
get_handle
(
)
const
{
return
handle
;
}
private
:
cudnnHandle_t
handle
;
};
static
cudnnHandle_t
context
()
{
thread_local
cudnn_context
c
;
return
c
.
get_handle
();
}
// ------------------------------------------------------------------------------------
...
...
@@ -136,7 +149,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
add
(
cudnn_context
&
context
,
float
beta
,
tensor
&
dest
,
float
alpha
,
...
...
@@ -146,7 +158,6 @@ namespace dlib
}
void
set_tensor
(
cudnn_context
&
context
,
tensor
&
t
,
float
value
)
...
...
@@ -154,7 +165,6 @@ namespace dlib
}
void
scale_tensor
(
cudnn_context
&
context
,
tensor
&
t
,
float
value
)
...
...
@@ -194,7 +204,6 @@ namespace dlib
void
conv
::
setup
(
cudnn_context
&
context
,
const
tensor
&
data
,
const
tensor
&
filters
,
int
stride_y
,
...
...
@@ -272,7 +281,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
soft_max
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
)
...
...
@@ -280,7 +288,6 @@ namespace dlib
}
void
soft_max_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
@@ -292,7 +299,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
max_pool
::
max_pool
(
cudnn_context
&
context
,
int
window_height
,
int
window_width
,
int
stride_y
,
...
...
@@ -326,7 +332,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
sigmoid
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
)
...
...
@@ -334,7 +339,6 @@ namespace dlib
}
void
sigmoid_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
@@ -345,7 +349,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
relu
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
)
...
...
@@ -353,7 +356,6 @@ namespace dlib
}
void
relu_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
@@ -364,7 +366,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
tanh
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
)
...
...
@@ -372,7 +373,6 @@ namespace dlib
}
void
tanh_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
dlib/dnn/cudnn_dlibapi.h
View file @
10480cb9
...
...
@@ -17,31 +17,6 @@ namespace dlib
// -----------------------------------------------------------------------------------
class
cudnn_context
{
public
:
// not copyable
cudnn_context
(
const
cudnn_context
&
)
=
delete
;
cudnn_context
&
operator
=
(
const
cudnn_context
&
)
=
delete
;
// but is movable
cudnn_context
(
cudnn_context
&&
item
)
:
cudnn_context
()
{
swap
(
item
);
}
cudnn_context
&
operator
=
(
cudnn_context
&&
item
)
{
swap
(
item
);
return
*
this
;
}
cudnn_context
();
~
cudnn_context
();
const
void
*
get_handle
(
)
const
{
return
handle
;
}
private
:
void
swap
(
cudnn_context
&
item
)
{
std
::
swap
(
handle
,
item
.
handle
);
}
void
*
handle
;
};
// ------------------------------------------------------------------------------------
class
tensor_descriptor
{
/*!
...
...
@@ -91,7 +66,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
add
(
cudnn_context
&
context
,
float
beta
,
tensor
&
dest
,
float
alpha
,
...
...
@@ -117,7 +91,6 @@ namespace dlib
!*/
void
set_tensor
(
cudnn_context
&
context
,
tensor
&
t
,
float
value
);
...
...
@@ -128,7 +101,6 @@ namespace dlib
!*/
void
scale_tensor
(
cudnn_context
&
context
,
tensor
&
t
,
float
value
);
...
...
@@ -155,7 +127,6 @@ namespace dlib
);
void
setup
(
cudnn_context
&
context
,
const
tensor
&
data
,
const
tensor
&
filters
,
int
stride_y
,
...
...
@@ -236,7 +207,6 @@ namespace dlib
// ------------------------------------------------------------------------------------
void
soft_max
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
);
...
...
@@ -245,13 +215,12 @@ namespace dlib
!*/
void
soft_max_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
);
/*!
- let OUT be the output of soft_max(
context,
OUT,src)
- let OUT be the output of soft_max(OUT,src)
- let f(src) == dot(gradient_input,OUT)
- Then this function computes the gradient of f() with respect to src
and adds it to grad.
...
...
@@ -271,7 +240,6 @@ namespace dlib
// cudnnCreatePoolingDescriptor(), cudnnSetPooling2dDescriptor()
max_pool
(
cudnn_context
&
context
,
int
window_height
,
int
window_width
,
int
stride_y
,
...
...
@@ -310,7 +278,6 @@ namespace dlib
// cudnnActivationForward(), CUDNN_ACTIVATION_SIGMOID
void
sigmoid
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
);
...
...
@@ -323,7 +290,6 @@ namespace dlib
// cudnnActivationBackward()
void
sigmoid_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
@@ -333,7 +299,7 @@ namespace dlib
- have_same_dimensions(src,gradient_input) == true
- have_same_dimensions(src,grad) == true
ensures
- let OUT be the output of sigmoid(
context,
OUT,src)
- let OUT be the output of sigmoid(OUT,src)
- let f(src) == dot(gradient_input,OUT)
- Then this function computes the gradient of f() with respect to src and
adds it to grad.
...
...
@@ -343,7 +309,6 @@ namespace dlib
// cudnnActivationForward(), CUDNN_ACTIVATION_RELU
void
relu
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
);
...
...
@@ -356,7 +321,6 @@ namespace dlib
// cudnnActivationBackward()
void
relu_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
@@ -366,7 +330,7 @@ namespace dlib
- have_same_dimensions(src,gradient_input) == true
- have_same_dimensions(src,grad) == true
ensures
- let OUT be the output of relu(
context,
OUT,src)
- let OUT be the output of relu(OUT,src)
- let f(src) == dot(gradient_input,OUT)
- Then this function computes the gradient of f() with respect to src and
adds it to grad.
...
...
@@ -376,7 +340,6 @@ namespace dlib
// cudnnActivationForward(), CUDNN_ACTIVATION_TANH
void
tanh
(
cudnn_context
&
context
,
resizable_tensor
&
dest
,
const
tensor
&
src
);
...
...
@@ -389,7 +352,6 @@ namespace dlib
// cudnnActivationBackward()
void
tanh_gradient
(
cudnn_context
&
context
,
tensor
&
grad
,
const
tensor
&
src
,
const
tensor
&
gradient_input
...
...
@@ -399,7 +361,7 @@ namespace dlib
- have_same_dimensions(src,gradient_input) == true
- have_same_dimensions(src,grad) == true
ensures
- let OUT be the output of tanh(
context,
OUT,src)
- let OUT be the output of tanh(OUT,src)
- let f(src) == dot(gradient_input,OUT)
- Then this function computes the gradient of f() with respect to src and
adds it to grad.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment