Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
7da1db05
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7da1db05
编写于
8月 07, 2017
作者:
D
dangqingqing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update cuda kernel.
上级
da7b9a5e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
29 addition
and
30 deletion
+29
-30
paddle/cuda/src/hl_batch_norm.cu
paddle/cuda/src/hl_batch_norm.cu
+14
-16
paddle/gserver/layers/CudnnBatchNormLayer.cpp
paddle/gserver/layers/CudnnBatchNormLayer.cpp
+15
-14
未找到文件。
paddle/cuda/src/hl_batch_norm.cu
浏览文件 @
7da1db05
...
@@ -25,11 +25,11 @@ __global__ void batchNormInference(real* output,
...
@@ -25,11 +25,11 @@ __global__ void batchNormInference(real* output,
size_t
channel
,
size_t
channel
,
size_t
height
,
size_t
height
,
size_t
width
)
{
size_t
width
)
{
const
int
tid
=
blockIdx
.
x
*
blockDim
.
x
+
threadIdx
.
x
;
const
int
tid
=
threadIdx
.
x
;
const
int
num
=
channel
*
height
*
width
;
const
int
num
=
channel
*
height
*
width
;
const
int
batch
=
blockIdx
.
y
;
const
int
batch
=
blockIdx
.
x
;
for
(
int
i
=
tid
;
i
<
num
;
i
+=
blockDim
.
x
)
{
for
(
int
i
=
tid
;
i
<
num
;
i
+=
blockDim
.
x
)
{
const
int
c
=
(
i
/
(
height
*
width
))
%
channel
;
const
int
c
=
i
/
(
height
*
width
)
;
const
int
id
=
batch
*
num
+
i
;
const
int
id
=
batch
*
num
+
i
;
real
val
=
input
[
id
]
-
estimatedMean
[
c
];
real
val
=
input
[
id
]
-
estimatedMean
[
c
];
val
/=
sqrt
(
estimatedVar
[
c
]
+
epsilon
);
val
/=
sqrt
(
estimatedVar
[
c
]
+
epsilon
);
...
@@ -50,19 +50,17 @@ void hl_batch_norm_cuda_inference(const real* input,
...
@@ -50,19 +50,17 @@ void hl_batch_norm_cuda_inference(const real* input,
size_t
channel
,
size_t
channel
,
size_t
height
,
size_t
height
,
size_t
width
)
{
size_t
width
)
{
dim3
block
(
256
,
1
);
batchNormInference
<<<
batchSize
,
256
,
0
,
STREAM_DEFAULT
>>>
(
output
,
dim3
grid
(
1
,
batchSize
);
input
,
batchNormInference
<<<
grid
,
block
,
0
,
STREAM_DEFAULT
>>>
(
output
,
scale
,
input
,
bias
,
scale
,
estimatedMean
,
bias
,
estimatedVar
,
estimatedMean
,
epsilon
,
estimatedVar
,
batchSize
,
epsilon
,
channel
,
batchSize
,
height
,
channel
,
width
);
height
,
width
);
CHECK_SYNC
(
"hl_batch_norm_cuda_inference failed!"
);
CHECK_SYNC
(
"hl_batch_norm_cuda_inference failed!"
);
}
}
paddle/gserver/layers/CudnnBatchNormLayer.cpp
浏览文件 @
7da1db05
...
@@ -80,9 +80,21 @@ void CudnnBatchNormLayer::forward(PassType passType) {
...
@@ -80,9 +80,21 @@ void CudnnBatchNormLayer::forward(PassType passType) {
savedInvVar
);
savedInvVar
);
}
else
{
}
else
{
// used movingMean and movingVar in testing
// used movingMean and movingVar in testing
if
(
batchSize
>
1024
)
{
if
(
batchSize
<=
1024
)
{
// there is a bug in cudnn library when the batch size
hl_batch_norm_forward_inference
(
ioDesc_
,
// is larger than 1024.
input
,
ioDesc_
,
output
,
bnParamDesc_
,
gamma
,
beta
,
movingMean
,
movingVar
,
EPS
);
}
else
{
// There is a limitation in cudnn library.
// When the batch size is larger than 1024 in cuDNN v5.1,
// the cudnnBatchNormalizationForwardInference will fail.
hl_batch_norm_cuda_inference
(
input
,
hl_batch_norm_cuda_inference
(
input
,
output
,
output
,
gamma
,
gamma
,
...
@@ -94,17 +106,6 @@ void CudnnBatchNormLayer::forward(PassType passType) {
...
@@ -94,17 +106,6 @@ void CudnnBatchNormLayer::forward(PassType passType) {
channels_
,
channels_
,
imageH_
,
imageH_
,
imageW_
);
imageW_
);
}
else
{
hl_batch_norm_forward_inference
(
ioDesc_
,
input
,
ioDesc_
,
output
,
bnParamDesc_
,
gamma
,
beta
,
movingMean
,
movingVar
,
EPS
);
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录