Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
db468d7d
P
Paddle
项目概览
PaddlePaddle
/
Paddle
大约 1 年 前同步成功
通知
2296
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
db468d7d
编写于
4月 21, 2022
作者:
J
jakpiase
提交者:
GitHub
4月 21, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
oneDNN md-in-tensor 2nd batch of changes (#41997)
上级
5c738223
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
121 addition
and
244 deletion
+121
-244
paddle/fluid/operators/mkldnn/activation_mkldnn_op.cc
paddle/fluid/operators/mkldnn/activation_mkldnn_op.cc
+4
-6
paddle/fluid/operators/mkldnn/batch_norm_mkldnn_op.cc
paddle/fluid/operators/mkldnn/batch_norm_mkldnn_op.cc
+7
-44
paddle/fluid/operators/mkldnn/clip_mkldnn_op.cc
paddle/fluid/operators/mkldnn/clip_mkldnn_op.cc
+2
-4
paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc
paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc
+6
-11
paddle/fluid/operators/mkldnn/expand_v2_mkldnn_op.cc
paddle/fluid/operators/mkldnn/expand_v2_mkldnn_op.cc
+7
-8
paddle/fluid/operators/mkldnn/gaussian_random_mkldnn_op.cc
paddle/fluid/operators/mkldnn/gaussian_random_mkldnn_op.cc
+8
-3
paddle/fluid/operators/mkldnn/interpolate_mkldnn_op.cc
paddle/fluid/operators/mkldnn/interpolate_mkldnn_op.cc
+8
-12
paddle/fluid/operators/mkldnn/layer_norm_mkldnn_op.cc
paddle/fluid/operators/mkldnn/layer_norm_mkldnn_op.cc
+10
-13
paddle/fluid/operators/mkldnn/log_softmax_mkldnn_op.cc
paddle/fluid/operators/mkldnn/log_softmax_mkldnn_op.cc
+2
-7
paddle/fluid/operators/mkldnn/lrn_mkldnn_op.cc
paddle/fluid/operators/mkldnn/lrn_mkldnn_op.cc
+5
-16
paddle/fluid/operators/mkldnn/pool_mkldnn_op.cc
paddle/fluid/operators/mkldnn/pool_mkldnn_op.cc
+12
-47
paddle/fluid/operators/mkldnn/prelu_mkldnn_op.cc
paddle/fluid/operators/mkldnn/prelu_mkldnn_op.cc
+11
-18
paddle/fluid/operators/mkldnn/scale_mkldnn_op.cc
paddle/fluid/operators/mkldnn/scale_mkldnn_op.cc
+1
-2
paddle/fluid/operators/mkldnn/shape_mkldnn_op.cc
paddle/fluid/operators/mkldnn/shape_mkldnn_op.cc
+8
-4
paddle/fluid/operators/mkldnn/shuffle_channel_mkldnn_op.cc
paddle/fluid/operators/mkldnn/shuffle_channel_mkldnn_op.cc
+2
-6
paddle/fluid/operators/mkldnn/softmax_mkldnn_op.cc
paddle/fluid/operators/mkldnn/softmax_mkldnn_op.cc
+7
-20
paddle/fluid/operators/mkldnn/softplus_mkldnn_op.h
paddle/fluid/operators/mkldnn/softplus_mkldnn_op.h
+6
-7
python/paddle/fluid/tests/unittests/mkldnn/test_expand_v2_mkldnn_op.py
.../fluid/tests/unittests/mkldnn/test_expand_v2_mkldnn_op.py
+15
-16
未找到文件。
paddle/fluid/operators/mkldnn/activation_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -107,8 +107,7 @@ void eltwise_forward(const framework::ExecutionContext &ctx,
astream
,
{{
DNNL_ARG_FROM
,
*
src_memory_p
},
{
DNNL_ARG_TO
,
*
dst_memory_p
}});
astream
.
wait
();
out
->
set_layout
(
DataLayout
::
kMKLDNN
);
out
->
set_format
(
GetMKLDNNFormat
(
*
dst_memory_p
));
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
template
<
typename
T
>
...
...
@@ -136,8 +135,7 @@ void eltwise_grad(const framework::ExecutionContext &ctx,
{
DNNL_ARG_DIFF_SRC
,
*
diff_src_memory_p
}});
astream
.
wait
();
dx
->
set_layout
(
DataLayout
::
kMKLDNN
);
dx
->
set_format
(
GetMKLDNNFormat
(
*
diff_src_memory_p
));
dx
->
set_mem_desc
(
diff_src_memory_p
->
get_desc
());
}
template
<
typename
T
>
...
...
@@ -165,8 +163,7 @@ void eltwise_grad_use_out(const framework::ExecutionContext &ctx,
{
DNNL_ARG_DIFF_SRC
,
*
diff_src_memory_p
}});
astream
.
wait
();
dx
->
set_layout
(
DataLayout
::
kMKLDNN
);
dx
->
set_format
(
GetMKLDNNFormat
(
*
diff_src_memory_p
));
dx
->
set_mem_desc
(
diff_src_memory_p
->
get_desc
());
}
template
<
typename
T
,
dnnl
::
algorithm
algorithm
>
...
...
@@ -347,6 +344,7 @@ namespace ops = paddle::operators;
FOR_EACH_MKLDNN_KERNEL_FUNCTOR
(
REGISTER_ACTIVATION_MKLDNN_KERNEL
);
// round eltwise primitive doesn't support BF16, nor does it support grad
REGISTER_ACTIVATION_MKLDNN_KERNEL_FWD_ONLY
(
round
,
RoundMKLDNNFunctor
);
namespace
ops
=
paddle
::
operators
;
...
...
paddle/fluid/operators/mkldnn/batch_norm_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -54,17 +54,6 @@ class BatchNormMKLDNNHandler : public platform::MKLDNNHandlerNoCachingT<
std
::
vector
<
std
::
string
>
DataLayout_error_msg
=
{
"kNHWC"
,
"kNCHW"
,
"kAnyLayout"
,
"kMKLDNN"
};
PADDLE_ENFORCE_EQ
(
x
->
layout
(),
DataLayout
::
kMKLDNN
,
platform
::
errors
::
InvalidArgument
(
"Wrong layout set for X tensor. Expected layout is `kMKLDNN`, "
"But received %s."
,
DataLayout_error_msg
[
static_cast
<
int
>
(
DataLayout
::
kMKLDNN
)]));
PADDLE_ENFORCE_NE
(
x
->
format
(),
MKLDNNMemoryFormat
::
undef
,
platform
::
errors
::
InvalidArgument
(
"Wrong format set for X tensor"
));
auto
src_tz
=
phi
::
vectorize
(
x
->
dims
());
// Flags are added by bitwise OR operation
auto
flags
=
dnnl
::
normalization_flags
::
use_scale_shift
;
// 001
...
...
@@ -73,14 +62,10 @@ class BatchNormMKLDNNHandler : public platform::MKLDNNHandlerNoCachingT<
if
(
fuse_with_relu
&&
test_mode
)
flags
|=
dnnl
::
normalization_flags
::
fuse_norm_relu
;
// 100
auto
md
=
dnnl
::
memory
::
desc
(
src_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
platform
::
MKLDNNFormatForSize
(
src_tz
.
size
(),
x
->
format
()));
this
->
AcquireForwardPrimitiveDescriptor
(
global_stats
==
true
?
dnnl
::
prop_kind
::
forward_scoring
:
dnnl
::
prop_kind
::
forward_training
,
md
,
epsilon
,
flags
);
x
->
mem_desc
()
,
epsilon
,
flags
);
}
BatchNormMKLDNNHandler
(
const
paddle
::
framework
::
ExecutionContext
&
ctx
,
...
...
@@ -89,14 +74,6 @@ class BatchNormMKLDNNHandler : public platform::MKLDNNHandlerNoCachingT<
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
batch_normalization_forward
,
dnnl
::
batch_normalization_backward
>
(
mkldnn_engine
,
ctx
.
GetPlace
())
{
PADDLE_ENFORCE_EQ
(
out_grad
->
layout
(),
DataLayout
::
kMKLDNN
,
platform
::
errors
::
InvalidArgument
(
"Wrong layout set for Input out_grad tensor"
));
PADDLE_ENFORCE_NE
(
out_grad
->
format
(),
MKLDNNMemoryFormat
::
undef
,
platform
::
errors
::
InvalidArgument
(
"Wrong format set for Input out_grad tensor"
));
auto
src_tz
=
phi
::
vectorize
<
int64_t
>
(
in_x
->
dims
());
auto
scale_tz
=
phi
::
vectorize
<
int64_t
>
(
scale
->
dims
());
PADDLE_ENFORCE_EQ
(
scale_tz
.
size
(),
1
,
...
...
@@ -104,26 +81,14 @@ class BatchNormMKLDNNHandler : public platform::MKLDNNHandlerNoCachingT<
"Dims of scale tensor must be 1, but received scale's size is %d"
,
scale_tz
.
size
()));
MKLDNNMemoryFormat
diff_fmt
=
platform
::
MKLDNNFormatForSize
(
src_tz
.
size
(),
out_grad
->
format
());
MKLDNNMemoryFormat
src_fmt
=
platform
::
MKLDNNFormatForSize
(
src_tz
.
size
(),
in_x
->
format
());
auto
dims
=
phi
::
vectorize
(
in_x
->
dims
());
auto
diff_dst_md
=
dnnl
::
memory
::
desc
(
dims
,
platform
::
MKLDNNGetDataType
<
T
>
(),
diff_fmt
);
auto
src_md
=
dnnl
::
memory
::
desc
(
dims
,
platform
::
MKLDNNGetDataType
<
T
>
(),
src_fmt
);
const
float
epsilon
=
ctx
.
Attr
<
float
>
(
"epsilon"
);
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_training
,
src_md
,
epsilon
,
dnnl
::
prop_kind
::
forward_training
,
in_x
->
mem_desc
()
,
epsilon
,
dnnl
::
normalization_flags
::
use_scale_shift
);
this
->
AcquireBackwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
backward
,
diff_dst_md
,
src_md
,
epsilon
,
dnnl
::
normalization_flags
::
use_scale_shift
);
dnnl
::
prop_kind
::
backward
,
out_grad
->
mem_desc
(),
in_x
->
mem_desc
()
,
epsilon
,
dnnl
::
normalization_flags
::
use_scale_shift
);
}
std
::
shared_ptr
<
dnnl
::
memory
>
AcquireScaleShiftMemory
(
const
Tensor
*
scale
,
...
...
@@ -227,8 +192,7 @@ class BatchNormMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
variance_memory
=
handler
.
AcquireVarianceMemory
(
batch_variance
);
}
y
->
set_layout
(
DataLayout
::
kMKLDNN
);
y
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_memory
));
y
->
set_mem_desc
(
dst_memory
->
get_desc
());
auto
&
astream
=
platform
::
MKLDNNDeviceContext
::
tls
().
get_stream
();
batch_norm_p
->
execute
(
astream
,
{{
DNNL_ARG_SRC
,
*
src_memory
},
...
...
@@ -322,9 +286,8 @@ class BatchNormMKLDNNGradOpKernel : public paddle::framework::OpKernel<T> {
std
::
copy
(
std
::
next
(
it
,
C
),
std
::
end
(
diff_scaleshift_data
),
diff_shift_data
);
// set layout/format of output tensors
diff_x
->
set_layout
(
DataLayout
::
kMKLDNN
);
diff_x
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
diff_src_memory
));
// set memory descriptor of out tensor
diff_x
->
set_mem_desc
(
diff_src_memory
->
get_desc
());
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/clip_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -46,8 +46,7 @@ class ClipMKLDNNKernel : public paddle::framework::OpKernel<T> {
{
DNNL_ARG_TO
,
*
dst_memory_p
}});
astream
.
wait
();
out
->
set_layout
(
paddle
::
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
paddle
::
platform
::
GetMKLDNNFormat
(
*
dst_memory_p
));
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
};
...
...
@@ -83,8 +82,7 @@ class ClipGradMKLDNNKernel : public paddle::framework::OpKernel<T> {
{
DNNL_ARG_DIFF_SRC
,
*
diff_src_memory_p
}});
astream
.
wait
();
dx
->
set_layout
(
paddle
::
framework
::
DataLayout
::
kMKLDNN
);
dx
->
set_format
(
paddle
::
platform
::
GetMKLDNNFormat
(
*
diff_dst_memory_p
));
dx
->
set_mem_desc
(
diff_dst_memory_p
->
get_desc
());
}
};
...
...
paddle/fluid/operators/mkldnn/concat_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -68,8 +68,7 @@ class ConcatMKLDNNHandler
// Create memory descriptors for each of inputs
for
(
size_t
i
=
0
;
i
<
inputs
.
size
();
++
i
)
{
const
auto
dims
=
phi
::
vectorize
<
int64_t
>
(
inputs
[
i
]
->
dims
());
srcs_md
.
emplace_back
(
memory
::
desc
(
dims
,
dt
,
inputs
[
i
]
->
format
()));
srcs_md
.
push_back
(
inputs
[
i
]
->
mem_desc
());
}
auto
dst_dims
=
phi
::
vectorize
<
int64_t
>
(
output
->
dims
());
...
...
@@ -99,9 +98,6 @@ static void EnforceLayouts(const std::vector<const Tensor*> inputs) {
PADDLE_ENFORCE_EQ
(
input
->
layout
(),
DataLayout
::
kMKLDNN
,
platform
::
errors
::
InvalidArgument
(
"Wrong layout set for Input tensor"
));
PADDLE_ENFORCE_NE
(
input
->
format
(),
MKLDNNMemoryFormat
::
undef
,
platform
::
errors
::
InvalidArgument
(
"Wrong format set for Input tensor"
));
}
}
...
...
@@ -147,8 +143,7 @@ class ConcatMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
concat_p
->
execute
(
astream
,
args
);
astream
.
wait
();
output
->
set_layout
(
DataLayout
::
kMKLDNN
);
output
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_mem
));
output
->
set_mem_desc
(
dst_mem
->
get_desc
());
}
};
...
...
@@ -192,7 +187,7 @@ class ConcatGradMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
dout_vec_dims
,
framework
::
TransToProtoVarType
(
dout
->
dtype
()),
dout_type
,
onednn_engine
);
auto
reorder_src_memory_p
=
reorder_handler
.
AcquireSrcMemory
(
dout
->
format
(),
platform
::
to_void_cast
(
dout
->
data
<
T
>
()));
dout
->
mem_desc
(),
platform
::
to_void_cast
(
dout
->
data
<
T
>
()));
for
(
size_t
i
=
0
;
i
<
dx
.
size
();
++
i
)
{
if
(
out_var_names
[
i
]
!=
framework
::
kEmptyVarName
&&
...
...
@@ -202,7 +197,8 @@ class ConcatGradMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
dx_vec_dims
,
offset
,
reorder_src_memory_p
);
auto
reorder_dst_memory_p
=
reorder_handler
.
AcquireDstMemory
(
dx
[
i
],
dx_vec_dims
,
dout
->
format
(),
ctx
.
GetPlace
());
dx
[
i
],
dx_vec_dims
,
platform
::
GetPlainMKLDNNFormat
(
dx_vec_dims
.
size
()),
ctx
.
GetPlace
());
auto
reorder_p
=
reorder_handler
.
AcquireReorder
(
reorder_dst_memory_p
,
slice_mem_p
);
...
...
@@ -210,8 +206,7 @@ class ConcatGradMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
offset
[
axis
]
+=
dx
[
i
]
->
dims
()[
axis
];
dx
[
i
]
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
dx
[
i
]
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
reorder_dst_memory_p
));
dx
[
i
]
->
set_mem_desc
(
reorder_dst_memory_p
->
get_desc
());
}
}
astream
.
wait
();
...
...
paddle/fluid/operators/mkldnn/expand_v2_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -115,10 +115,11 @@ class ExpandGradMKLDNNKernel : public paddle::framework::OpKernel<T> {
dout_type
,
onednn_engine
);
auto
reorder_src_memory_p
=
reorder_handler
.
AcquireSrcMemory
(
dout
->
format
(),
paddle
::
platform
::
to_void_cast
(
dout
->
data
<
T
>
()));
dout
->
mem_desc
(),
paddle
::
platform
::
to_void_cast
(
dout
->
data
<
T
>
()));
auto
reorder_dst_memory_p
=
reorder_handler
.
AcquireDstMemory
(
dx
,
dout
->
format
(),
ctx
.
GetPlace
());
auto
reorder_dst_memory_p
=
reorder_handler
.
AcquireDstMemory
(
dx
,
paddle
::
platform
::
GetPlainMKLDNNFormat
(
dx_vec_dims
.
size
()),
ctx
.
GetPlace
());
auto
reorder_p
=
reorder_handler
.
AcquireReorder
(
reorder_src_memory_p
,
reorder_dst_memory_p
);
...
...
@@ -126,9 +127,7 @@ class ExpandGradMKLDNNKernel : public paddle::framework::OpKernel<T> {
reorder_p
->
execute
(
astream
,
*
reorder_src_memory_p
,
*
reorder_dst_memory_p
);
astream
.
wait
();
dx
->
set_layout
(
paddle
::
framework
::
DataLayout
::
kMKLDNN
);
dx
->
set_format
(
paddle
::
platform
::
GetMKLDNNFormat
(
reorder_dst_memory_p
->
get_desc
()));
dx
->
set_mem_desc
(
reorder_dst_memory_p
->
get_desc
());
}
else
{
paddle
::
platform
::
ReductionMKLDNNHandler
<
T
>
handler
(
dnnl
::
algorithm
::
reduction_sum
,
0.0
f
,
0.0
f
,
onednn_engine
,
...
...
@@ -145,8 +144,8 @@ class ExpandGradMKLDNNKernel : public paddle::framework::OpKernel<T> {
reduction_p
->
execute
(
astream
,
reduction_args
);
astream
.
wait
();
dx
->
set_layout
(
paddle
::
framework
::
DataLayout
::
kMKLDNN
);
dx
->
set_
format
(
paddle
::
platform
::
GetMKLDNNFormat
(
dst_memory_p
->
get_desc
().
reshape
(
vectorize
<
int64_t
>
(
dx
->
dims
())))
)
;
dx
->
set_
mem_desc
(
dst_memory_p
->
get_desc
().
reshape
(
vectorize
<
int64_t
>
(
dx
->
dims
())));
}
}
};
...
...
paddle/fluid/operators/mkldnn/gaussian_random_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -16,7 +16,7 @@ limitations under the License. */
#include "paddle/fluid/framework/generator.h"
#include "paddle/fluid/operators/fill_constant_op.h"
#include "paddle/fluid/platform/mkldnn_
helper
.h"
#include "paddle/fluid/platform/mkldnn_
reuse
.h"
namespace
paddle
{
namespace
operators
{
...
...
@@ -42,8 +42,13 @@ class GaussianMKLDNNKernel : public paddle::framework::OpKernel<T> {
data
[
i
]
=
dist
(
*
engine
);
}
tensor
->
set_layout
(
DataLayout
::
kMKLDNN
);
tensor
->
set_format
(
platform
::
GetPlainMKLDNNFormat
(
tensor
->
dims
().
size
()));
dnnl
::
memory
::
desc
out_mem_desc
(
phi
::
vectorize
(
tensor
->
dims
()),
framework
::
ToMKLDNNDataType
(
framework
::
TransToProtoVarType
(
tensor
->
dtype
())),
platform
::
GetPlainMKLDNNFormat
(
tensor
->
dims
().
size
()));
tensor
->
set_mem_desc
(
out_mem_desc
);
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/interpolate_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -34,17 +34,14 @@ class InterpolateMKLDNNHandler
public:
InterpolateMKLDNNHandler
(
const
dnnl
::
algorithm
algo
,
const
dnnl
::
engine
engine
,
platform
::
Place
cpu_place
,
const
Tensor
*
x
,
Tensor
*
z
)
const
Tensor
*
x
,
Tensor
*
out
)
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
resampling_forward
>
(
engine
,
cpu_place
)
{
const
auto
src_x_tz
=
phi
::
vectorize
(
x
->
dims
());
const
auto
dst_tz
=
phi
::
vectorize
(
z
->
dims
());
const
auto
src_md
=
dnnl
::
memory
::
desc
(
src_x_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
x
->
format
());
const
auto
dst_tz
=
phi
::
vectorize
(
out
->
dims
());
const
auto
dst_md
=
memory
::
desc
(
dst_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
MKLDNNMemoryFormat
::
any
);
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_inference
,
algo
,
src_md
,
dst_md
);
algo
,
x
->
mem_desc
()
,
dst_md
);
}
};
...
...
@@ -133,7 +130,7 @@ class InterpolateMKLDNNKernel : public framework::OpKernel<T> {
const
auto
&
mkldnn_engine
=
dev_ctx
.
GetEngine
();
const
auto
*
x
=
ctx
.
Input
<
Tensor
>
(
"X"
);
auto
*
z
=
ctx
.
Output
<
Tensor
>
(
"Out"
);
auto
*
out
=
ctx
.
Output
<
Tensor
>
(
"Out"
);
const
auto
interp_method
=
ctx
.
Attr
<
std
::
string
>
(
"interp_method"
);
const
dnnl
::
algorithm
algo
=
(
interp_method
==
"nearest"
)
...
...
@@ -142,13 +139,13 @@ class InterpolateMKLDNNKernel : public framework::OpKernel<T> {
const
auto
out_dims_vec
=
ComputeOutputShape
(
ctx
);
framework
::
DDim
dim_out
=
phi
::
make_ddim
(
out_dims_vec
);
z
->
Resize
(
dim_out
);
out
->
Resize
(
dim_out
);
InterpolateMKLDNNHandler
<
T
>
handler
(
algo
,
mkldnn_engine
,
ctx
.
GetPlace
(),
x
,
z
);
out
);
auto
src_memory_p
=
handler
.
AcquireSrcMemory
(
x
);
auto
dst_memory_p
=
handler
.
AcquireDstMemory
(
z
);
auto
dst_memory_p
=
handler
.
AcquireDstMemory
(
out
);
auto
resampling_prim
=
handler
.
AcquireForwardPrimitive
();
const
std
::
unordered_map
<
int
,
dnnl
::
memory
>
args
=
{
...
...
@@ -158,8 +155,7 @@ class InterpolateMKLDNNKernel : public framework::OpKernel<T> {
resampling_prim
->
execute
(
astream
,
args
);
astream
.
wait
();
z
->
set_layout
(
DataLayout
::
kMKLDNN
);
z
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_memory_p
));
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
};
...
...
paddle/fluid/operators/mkldnn/layer_norm_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -25,22 +25,21 @@ class LayerNormMKLDNNHandler : public platform::MKLDNNHandlerNoCachingT<
public:
LayerNormMKLDNNHandler
(
const
std
::
vector
<
int64_t
>&
dims
,
const
float
&
epsilon
,
const
dnnl
::
normalization_flags
&
flags
,
const
bool
&
is_test
,
const
MKLDNNMemoryFormat
fmt
,
const
bool
&
is_test
,
const
Tensor
*
x
,
const
dnnl
::
engine
engine
,
platform
::
Place
cpu_place
)
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
layer_normalization_forward
>
(
engine
,
cpu_place
)
{
auto
md
=
dnnl
::
memory
::
desc
(
dims
,
platform
::
MKLDNNGetDataType
<
T
>
(),
fmt
);
if
(
!
is_test
)
{
// TODO(grygielski) Delete forcing stats_md after DNNL 1.2 is introduced
auto
stats_md
=
dnnl
::
memory
::
desc
(
{
begin
(
dims
),
end
(
dims
)
-
1
},
platform
::
MKLDNNGetDataType
<
float
>
(),
platform
::
MKLDNNFormatForSize
(
dims
.
size
()
-
1
,
MKLDNNMemoryFormat
::
nchw
));
platform
::
GetPlainMKLDNNFormat
(
dims
.
size
()
-
1
));
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_training
,
md
,
stats_md
,
epsilon
,
flags
);
x
->
mem_desc
(),
stats_md
,
epsilon
,
flags
);
}
else
{
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_inference
,
md
,
epsilon
,
flags
);
dnnl
::
prop_kind
::
forward_inference
,
x
->
mem_desc
()
,
epsilon
,
flags
);
}
}
...
...
@@ -83,7 +82,7 @@ class LayerNormMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
auto
*
x
=
ctx
.
Input
<
Tensor
>
(
"X"
);
auto
*
scale
=
ctx
.
Input
<
Tensor
>
(
"Scale"
);
auto
*
bias
=
ctx
.
Input
<
Tensor
>
(
"Bias"
);
auto
*
y
=
ctx
.
Output
<
Tensor
>
(
"Y"
);
auto
*
out
=
ctx
.
Output
<
Tensor
>
(
"Y"
);
const
float
epsilon
=
ctx
.
Attr
<
float
>
(
"epsilon"
);
const
auto
begin_norm_axis
=
ctx
.
Attr
<
int
>
(
"begin_norm_axis"
);
...
...
@@ -107,12 +106,11 @@ class LayerNormMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
flags
|=
dnnl
::
normalization_flags
::
use_scale_shift
;
}
LayerNormMKLDNNHandler
<
T
>
handler
(
src_tz
,
epsilon
,
flags
,
is_test
,
x
->
format
(),
mkldnn_engine
,
ctx
.
GetPlace
());
LayerNormMKLDNNHandler
<
T
>
handler
(
src_tz
,
epsilon
,
flags
,
is_test
,
x
,
mkldnn_engine
,
ctx
.
GetPlace
());
auto
src_memory
=
handler
.
AcquireSrcMemory
(
x
);
auto
dst_memory
=
handler
.
AcquireDstMemory
(
y
);
auto
dst_memory
=
handler
.
AcquireDstMemory
(
out
);
auto
layer_norm_p
=
handler
.
AcquireForwardPrimitive
();
...
...
@@ -140,8 +138,7 @@ class LayerNormMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
layer_norm_p
->
execute
(
astream
,
args
);
astream
.
wait
();
y
->
set_layout
(
phi
::
DataLayout
::
kMKLDNN
);
y
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_memory
));
out
->
set_mem_desc
(
dst_memory
->
get_desc
());
}
};
...
...
paddle/fluid/operators/mkldnn/log_softmax_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -28,12 +28,8 @@ class LogSoftmaxMKLDNNHandler
const
int
axis
)
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
logsoftmax_forward
>
(
mkldnn_engine
,
cpu_place
)
{
const
auto
logsoftmax_tz
=
phi
::
vectorize
(
x
->
dims
());
const
auto
md
=
dnnl
::
memory
::
desc
(
logsoftmax_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
x
->
format
());
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_inference
,
md
,
axis
);
x
->
mem_desc
()
,
axis
);
}
};
...
...
@@ -63,8 +59,7 @@ class LogSoftmaxMKLDNNKernel : public framework::OpKernel<T> {
{
DNNL_ARG_DST
,
*
dst_memory_p
}});
astream
.
wait
();
out
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
x
->
format
());
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/lrn_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -44,15 +44,11 @@ class LRNMKLDNNHandler
const
float
k
=
ctx
.
Attr
<
float
>
(
"k"
);
bool
is_test
=
ctx
.
Attr
<
bool
>
(
"is_test"
);
auto
dims
=
phi
::
vectorize
(
input
->
dims
());
auto
src_md
=
dnnl
::
memory
::
desc
(
dims
,
platform
::
MKLDNNGetDataType
<
T
>
(),
input
->
format
());
this
->
AcquireForwardPrimitiveDescriptor
(
is_test
?
dnnl
::
prop_kind
::
forward_inference
:
dnnl
::
prop_kind
::
forward_training
,
dnnl
::
algorithm
::
lrn_across_channels
,
src_md
,
n
,
alpha
,
beta
,
k
);
dnnl
::
algorithm
::
lrn_across_channels
,
input
->
mem_desc
(),
n
,
alpha
,
beta
,
k
);
}
LRNMKLDNNHandler
(
const
framework
::
ExecutionContext
&
ctx
,
...
...
@@ -72,20 +68,13 @@ class LRNMKLDNNHandler
const
float
beta
=
ctx
.
Attr
<
float
>
(
"beta"
);
const
float
k
=
ctx
.
Attr
<
float
>
(
"k"
);
auto
dims
=
phi
::
vectorize
<
int64_t
>
(
in_x
->
dims
());
auto
src_md
=
dnnl
::
memory
::
desc
(
dims
,
platform
::
MKLDNNGetDataType
<
T
>
(),
in_x
->
format
());
auto
diff_md
=
dnnl
::
memory
::
desc
(
dims
,
platform
::
MKLDNNGetDataType
<
T
>
(),
out_grad
->
format
());
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_training
,
dnnl
::
algorithm
::
lrn_across_channels
,
src_md
,
n
,
alpha
,
beta
,
k
);
in_x
->
mem_desc
()
,
n
,
alpha
,
beta
,
k
);
this
->
AcquireBackwardPrimitiveDescriptor
(
dnnl
::
algorithm
::
lrn_across_channels
,
src_md
,
diff_md
,
n
,
alpha
,
beta
,
k
);
dnnl
::
algorithm
::
lrn_across_channels
,
in_x
->
mem_desc
()
,
out_grad
->
mem_desc
(),
n
,
alpha
,
beta
,
k
);
}
std
::
shared_ptr
<
dnnl
::
memory
>
AcquireWorkspaceMemory
(
Tensor
*
workspace
)
{
...
...
paddle/fluid/operators/mkldnn/pool_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -41,13 +41,6 @@ class PoolingMKLDNNHandler
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
pooling_forward
,
dnnl
::
pooling_backward
>
(
mkldnn_engine
,
ctx
.
GetPlace
())
{
PADDLE_ENFORCE_EQ
(
input
->
layout
(),
DataLayout
::
kMKLDNN
,
platform
::
errors
::
InvalidArgument
(
"Wrong layout set for Input tensor."
));
PADDLE_ENFORCE_NE
(
input
->
format
(),
MKLDNNMemoryFormat
::
undef
,
platform
::
errors
::
InvalidArgument
(
"Wrong format set for Input tensor."
));
const
std
::
string
pooling_type
=
ctx
.
Attr
<
std
::
string
>
(
"pooling_type"
);
std
::
vector
<
int
>
ksize_temp
=
ctx
.
Attr
<
std
::
vector
<
int
>>
(
"ksize"
);
...
...
@@ -91,29 +84,18 @@ class PoolingMKLDNNHandler
phi
::
funcs
::
UpdatePadding
(
&
paddings
,
global_pooling
,
0
,
padding_algorithm
,
data_dims
,
strides
,
ksize
);
const
auto
src_tz
=
phi
::
vectorize
(
input
->
dims
());
const
auto
dst_tz
=
phi
::
vectorize
(
output
->
dims
());
const
auto
is_test
=
ctx
.
Attr
<
bool
>
(
"is_test"
);
const
bool
ceil_mode
=
ctx
.
Attr
<
bool
>
(
"ceil_mode"
);
const
auto
exclude_padding
=
ctx
.
Attr
<
bool
>
(
"exclusive"
);
auto
mkldnn_paddings
=
platform
::
ToMkldnnPadding
(
paddings
);
const
auto
dt
=
framework
::
ToMKLDNNDataType
(
framework
::
TransToProtoVarType
(
input
->
dtype
()));
const
auto
exclude_padding
=
ctx
.
Attr
<
bool
>
(
"exclusive"
);
const
auto
src_md
=
dnnl
::
memory
::
desc
(
src_tz
,
dt
,
input
->
format
());
/* create memory descriptor for pooling without specified format
* ('any') which lets a primitive (pooling in this case) choose
* the memory format preferred for best performance
*/
const
auto
src_tz
=
phi
::
vectorize
(
input
->
dims
());
const
auto
dst_tz
=
phi
::
vectorize
(
output
->
dims
());
const
auto
dst_md
=
platform
::
MKLDNNMemDesc
(
dst_tz
,
dt
,
MKLDNNMemoryFormat
::
any
);
auto
mkldnn_paddings
=
platform
::
ToMkldnnPadding
(
paddings
);
const
bool
ceil_mode
=
ctx
.
Attr
<
bool
>
(
"ceil_mode"
);
if
(
ceil_mode
)
{
CorrectOutputSize
(
src_tz
,
dst_tz
,
ksize
,
paddings
,
strides
,
mkldnn_paddings
[
1
]);
...
...
@@ -128,7 +110,8 @@ class PoolingMKLDNNHandler
?
dnnl
::
algorithm
::
pooling_max
:
(
exclude_padding
?
dnnl
::
algorithm
::
pooling_avg_exclude_padding
:
dnnl
::
algorithm
::
pooling_avg_include_padding
),
src_md
,
dst_md
,
strides
,
ksize
,
mkldnn_paddings
[
0
],
mkldnn_paddings
[
1
]);
input
->
mem_desc
(),
dst_md
,
strides
,
ksize
,
mkldnn_paddings
[
0
],
mkldnn_paddings
[
1
]);
}
PoolingMKLDNNHandler
(
const
paddle
::
framework
::
ExecutionContext
&
ctx
,
...
...
@@ -138,20 +121,6 @@ class PoolingMKLDNNHandler
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
pooling_forward
,
dnnl
::
pooling_backward
>
(
mkldnn_engine
,
ctx
.
GetPlace
())
{
PADDLE_ENFORCE_EQ
(
in_x
->
layout
(),
DataLayout
::
kMKLDNN
,
platform
::
errors
::
InvalidArgument
(
"Wrong layout set for Input tensor"
));
PADDLE_ENFORCE_NE
(
in_x
->
format
(),
MKLDNNMemoryFormat
::
undef
,
platform
::
errors
::
InvalidArgument
(
"Wrong format set for Input tensor"
));
PADDLE_ENFORCE_EQ
(
out_grad
->
layout
(),
DataLayout
::
kMKLDNN
,
platform
::
errors
::
InvalidArgument
(
"Wrong layout set for Input output_grad tensor"
));
PADDLE_ENFORCE_NE
(
out_grad
->
format
(),
MKLDNNMemoryFormat
::
undef
,
platform
::
errors
::
InvalidArgument
(
"Wrong format set for Input output_grad tensor"
));
PADDLE_ENFORCE_EQ
(
ctx
.
Attr
<
bool
>
(
"is_test"
),
false
,
platform
::
errors
::
InvalidArgument
(
...
...
@@ -187,10 +156,7 @@ class PoolingMKLDNNHandler
const
auto
dt
=
framework
::
ToMKLDNNDataType
(
framework
::
TransToProtoVarType
(
in_x
->
dtype
()));
auto
src_md
=
dnnl
::
memory
::
desc
(
src_tz
,
dt
,
in_x
->
format
());
auto
dst_md
=
dnnl
::
memory
::
desc
(
diff_dst_tz
,
dt
,
MKLDNNMemoryFormat
::
any
);
auto
diff_dst_md
=
dnnl
::
memory
::
desc
(
diff_dst_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
out_grad
->
format
());
auto
diff_src_md
=
dnnl
::
memory
::
desc
(
diff_src_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
MKLDNNMemoryFormat
::
any
);
...
...
@@ -211,14 +177,15 @@ class PoolingMKLDNNHandler
?
dnnl
::
algorithm
::
pooling_max
:
(
exclude_padding
?
dnnl
::
algorithm
::
pooling_avg_exclude_padding
:
dnnl
::
algorithm
::
pooling_avg_include_padding
),
src_md
,
dst_md
,
strides
,
ksize
,
mkldnn_paddings
[
0
],
mkldnn_paddings
[
1
]);
in_x
->
mem_desc
(),
dst_md
,
strides
,
ksize
,
mkldnn_paddings
[
0
],
mkldnn_paddings
[
1
]);
this
->
AcquireBackwardPrimitiveDescriptor
(
pooling_type
==
"max"
?
dnnl
::
algorithm
::
pooling_max
:
(
exclude_padding
?
dnnl
::
algorithm
::
pooling_avg_exclude_padding
:
dnnl
::
algorithm
::
pooling_avg_include_padding
),
diff_src_md
,
diff_dst_md
,
strides
,
ksize
,
mkldnn_paddings
[
0
],
diff_src_md
,
out_grad
->
mem_desc
()
,
strides
,
ksize
,
mkldnn_paddings
[
0
],
mkldnn_paddings
[
1
]);
}
...
...
@@ -327,8 +294,7 @@ class PoolMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
}
astream
.
wait
();
output
->
set_layout
(
DataLayout
::
kMKLDNN
);
output
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_memory
));
output
->
set_mem_desc
(
dst_memory
->
get_desc
());
}
};
...
...
@@ -369,8 +335,7 @@ class PoolMKLDNNGradOpKernel : public paddle::framework::OpKernel<T> {
}
astream
.
wait
();
in_x_grad
->
set_layout
(
DataLayout
::
kMKLDNN
);
in_x_grad
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
diff_src_memory
));
in_x_grad
->
set_mem_desc
(
diff_src_memory
->
get_desc
());
}
// Compute()
};
...
...
paddle/fluid/operators/mkldnn/prelu_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -41,9 +41,6 @@ class PReluMKLDNNHandler
platform
::
CreateKey
(
dev_ctx
,
phi
::
vectorize
(
x
->
dims
()),
uniq_name
))
{
if
(
unlikely
(
!
this
->
isCached
()))
{
auto
x_md
=
memory
::
desc
(
phi
::
vectorize
(
x
->
dims
()),
MKLDNNGetDataType
<
T
>
(),
x
->
format
());
auto
weights_dims
=
phi
::
vectorize
(
weights
->
dims
());
// weights must have same size as X only for "element" case
...
...
@@ -59,30 +56,28 @@ class PReluMKLDNNHandler
memory
::
format_tag
::
any
);
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_training
,
x
_md
,
weights_md
);
x
->
mem_desc
()
,
weights_md
);
if
(
!
is_test
)
this
->
AcquireBackwardPrimitiveDescriptor
(
x
_md
,
weights_md
,
x
_md
,
weights_md
);
this
->
AcquireBackwardPrimitiveDescriptor
(
x
->
mem_desc
(),
weights
_md
,
x
->
mem_desc
(),
weights_md
);
}
}
std
::
shared_ptr
<
memory
>
AcquireWeightsMemoryPossiblyWithReorder
(
const
Tensor
*
input
,
const
bool
is_test
)
{
const
T
*
input_data
=
input
->
data
<
T
>
();
const
Tensor
*
weights
,
const
bool
is_test
)
{
const
T
*
weights_data
=
weights
->
data
<
T
>
();
// if weights are 1D, every format tag is correct, so we accept
// format_tag::any's output and no reorder is needed
if
(
input
->
dims
().
size
()
==
1
)
{
if
(
weights
->
dims
().
size
()
==
1
)
{
return
this
->
AcquireMemoryFromPrimitive
(
this
->
fwd_pd_
->
weights_desc
(),
to_void_cast
<
T
>
(
input
_data
),
to_void_cast
<
T
>
(
weights
_data
),
"@alpha_mem_p"
);
}
auto
user_weights_md
=
memory
::
desc
(
phi
::
vectorize
(
input
->
dims
()),
MKLDNNGetDataType
<
T
>
(),
input
->
format
());
return
this
->
AcquireMemoryWithReorder
(
user_weights_md
,
this
->
fwd_pd_
->
weights_desc
(),
to_void_cast
<
T
>
(
input
_data
),
"@alpha_mem_p"
,
is_test
);
weights
->
mem_desc
()
,
this
->
fwd_pd_
->
weights_desc
(),
to_void_cast
<
T
>
(
weights
_data
),
"@alpha_mem_p"
,
is_test
);
}
std
::
shared_ptr
<
memory
>
AcquireDiffWeightsMemory
(
Tensor
*
output
)
{
...
...
@@ -128,8 +123,7 @@ class PReluMKLDNNKernel : public framework::OpKernel<T> {
{
DNNL_ARG_DST
,
*
dst_memory_p
}});
astream
.
wait
();
out
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
GetMKLDNNFormat
(
*
dst_memory_p
));
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
};
...
...
@@ -174,8 +168,7 @@ class PReluGradMKLDNNKernel : public framework::OpKernel<T> {
{
DNNL_ARG_DIFF_WEIGHTS
,
*
diff_weights_memory_p
}});
astream
.
wait
();
dx
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
dx
->
set_format
(
GetMKLDNNFormat
(
*
diff_src_memory_p
));
dx
->
set_mem_desc
(
diff_src_memory_p
->
get_desc
());
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/scale_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -54,8 +54,7 @@ class ScaleMKLDNNKernel : public framework::OpKernel<T> {
{
DNNL_ARG_TO
,
*
dst_memory_p
}});
astream
.
wait
();
out
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_memory_p
));
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/shape_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -13,7 +13,7 @@ See the License for the specific language governing permissions and
limitations under the License. */
#include "paddle/fluid/framework/op_registry.h"
#include "paddle/fluid/platform/mkldnn_
helper
.h"
#include "paddle/fluid/platform/mkldnn_
reuse
.h"
namespace
paddle
{
namespace
operators
{
...
...
@@ -40,9 +40,13 @@ class ShapeMKLDNNKernel : public framework::OpKernel<T> {
out_data
[
i
]
=
in_dims
[
i
];
}
auto
*
out
=
ctx
.
Output
<
Tensor
>
(
"Out"
);
out
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
platform
::
GetPlainMKLDNNFormat
(
out
->
dims
().
size
()));
dnnl
::
memory
::
desc
out_mem_desc
(
phi
::
vectorize
(
out_t
->
dims
()),
framework
::
ToMKLDNNDataType
(
framework
::
TransToProtoVarType
(
out_t
->
dtype
())),
platform
::
GetPlainMKLDNNFormat
(
out_t
->
dims
().
size
()));
out_t
->
set_mem_desc
(
out_mem_desc
);
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/shuffle_channel_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -29,11 +29,8 @@ class ShuffleChannelMKLDNNHandler
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
shuffle_forward
>
(
engine
,
cpu_place
)
{
static
constexpr
int
channel_axis
=
1
;
const
auto
md
=
dnnl
::
memory
::
desc
(
phi
::
vectorize
(
x
->
dims
()),
MKLDNNGetDataType
<
T
>
(),
x
->
format
());
this
->
AcquireForwardPrimitiveDescriptor
(
dnnl
::
prop_kind
::
forward_training
,
md
,
channel_axis
,
group
);
x
->
mem_desc
()
,
channel_axis
,
group
);
}
};
...
...
@@ -64,8 +61,7 @@ class ShuffleChannelMKLDNNKernel : public framework::OpKernel<T> {
{
DNNL_ARG_DST
,
*
dst_memory_p
}});
astream
.
wait
();
out
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
x
->
format
());
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/softmax_mkldnn_op.cc
浏览文件 @
db468d7d
...
...
@@ -47,12 +47,8 @@ class SoftmaxMKLDNNHandler
platform
::
errors
::
InvalidArgument
(
"The shape of input and output tensor must be identical."
));
auto
softmax_tz
=
phi
::
vectorize
(
input
->
dims
());
auto
md
=
memory
::
desc
(
softmax_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
input
->
format
());
this
->
AcquireForwardPrimitiveDescriptor
(
prop_kind
::
forward_scoring
,
md
,
axis
);
this
->
AcquireForwardPrimitiveDescriptor
(
prop_kind
::
forward_scoring
,
input
->
mem_desc
(),
axis
);
}
SoftmaxMKLDNNHandler
(
const
framework
::
ExecutionContext
&
ctx
,
...
...
@@ -73,17 +69,11 @@ class SoftmaxMKLDNNHandler
auto
dims
=
out_grad
->
dims
();
// input and output share the same shape
const
int
axis
=
phi
::
funcs
::
CanonicalAxis
(
ctx
.
Attr
<
int
>
(
"axis"
),
dims
.
size
());
auto
softmax_tz
=
phi
::
vectorize
<
int64_t
>
(
dims
);
auto
data_softmax_md
=
MKLDNNMemDesc
(
softmax_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
out
->
format
());
auto
diff_softmax_md
=
MKLDNNMemDesc
(
softmax_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
out_grad
->
format
());
this
->
AcquireForwardPrimitiveDescriptor
(
prop_kind
::
forward_scoring
,
data_softmax_md
,
axis
);
this
->
AcquireBackwardPrimitiveDescriptor
(
diff_softmax_md
,
data_softmax_md
,
axis
);
out
->
mem_desc
()
,
axis
);
this
->
AcquireBackwardPrimitiveDescriptor
(
out_grad
->
mem_desc
()
,
out
->
mem_desc
(),
axis
);
}
};
...
...
@@ -128,9 +118,7 @@ class SoftmaxMKLDNNKernel : public paddle::framework::OpKernel<T> {
});
}
output
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
// Softmax output format is the same as input one
output
->
set_format
(
input
->
format
());
output
->
set_mem_desc
(
softmax_dst_memory_p
->
get_desc
());
}
};
...
...
@@ -162,8 +150,7 @@ class SoftmaxMKLDNNGradKernel : public paddle::framework::OpKernel<T> {
{
DNNL_ARG_DIFF_SRC
,
*
diff_src_memory_p
}});
astream
.
wait
();
in_x_grad
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
in_x_grad
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
diff_src_memory_p
));
in_x_grad
->
set_mem_desc
(
diff_src_memory_p
->
get_desc
());
}
};
}
// namespace operators
...
...
paddle/fluid/operators/mkldnn/softplus_mkldnn_op.h
浏览文件 @
db468d7d
...
...
@@ -29,12 +29,11 @@ class SoftplusMKLDNNHandler
:
platform
::
MKLDNNHandlerNoCachingT
<
T
,
dnnl
::
binary
>
(
engine
,
ctx
.
GetPlace
())
{
auto
x_tz
=
phi
::
vectorize
(
x
->
dims
());
auto
x_md
=
dnnl
::
memory
::
desc
(
x_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
x
->
format
());
auto
beta_tz
=
std
::
vector
<
int64_t
>
(
x_tz
.
size
(),
1
);
auto
beta_md
=
dnnl
::
memory
::
desc
(
beta_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
x
->
format
());
auto
beta_md
=
dnnl
::
memory
::
desc
(
beta_tz
,
platform
::
MKLDNNGetDataType
<
T
>
(),
platform
::
GetPlainMKLDNNFormat
(
x_tz
.
size
()));
dnnl
::
post_ops
post_ops
;
post_ops
.
append_eltwise
(
1.0
f
,
dnnl
::
algorithm
::
eltwise_soft_relu
,
0.0
f
,
...
...
@@ -50,7 +49,8 @@ class SoftplusMKLDNNHandler
attrs
.
set_post_ops
(
post_ops
);
this
->
AcquireForwardPrimitiveDescriptor
(
attrs
,
dnnl
::
algorithm
::
binary_mul
,
x_md
,
beta_md
,
x_md
);
x
->
mem_desc
(),
beta_md
,
x
->
mem_desc
());
}
std
::
shared_ptr
<
dnnl
::
memory
>
AcquireBetaMemory
(
const
float
*
beta
)
{
...
...
@@ -129,8 +129,7 @@ void custom_softplus_eltwise_forward(const framework::ExecutionContext& ctx) {
binary_p
->
execute
(
astream
,
args
);
astream
.
wait
();
out
->
set_layout
(
framework
::
DataLayout
::
kMKLDNN
);
out
->
set_format
(
platform
::
GetMKLDNNFormat
(
*
dst_memory_p
));
out
->
set_mem_desc
(
dst_memory_p
->
get_desc
());
}
}
// namespace operators
}
// namespace paddle
python/paddle/fluid/tests/unittests/mkldnn/test_expand_v2_mkldnn_op.py
浏览文件 @
db468d7d
...
...
@@ -28,18 +28,22 @@ class TestExpandV2OneDNNOp(OpTest):
self
.
op_type
=
"expand_v2"
self
.
init_data
()
self
.
x
=
np
.
random
.
random
(
self
.
ori_shape
).
astype
(
"float32"
)
self
.
set_inputs
()
self
.
attrs
=
{
'shape'
:
self
.
shape
,
'use_mkldnn'
:
True
}
self
.
set_inputs
()
self
.
set_additional_inputs
()
output
=
np
.
tile
(
self
.
x
,
self
.
expand_times
)
self
.
outputs
=
{
'Out'
:
output
}
def
set_inputs
(
self
):
self
.
inputs
=
{
'X'
:
self
.
x
}
def
set_additional_inputs
(
self
):
pass
def
init_data
(
self
):
self
.
ori_shape
=
[
1
,
140
]
self
.
shape
=
[
12
,
140
]
self
.
expand_times
=
[
12
,
1
]
self
.
ori_shape
=
[
1
,
1
,
1
,
1
40
]
self
.
shape
=
[
2
,
3
,
4
,
140
]
self
.
expand_times
=
[
2
,
3
,
4
,
1
]
def
test_check_output
(
self
):
self
.
check_output_with_place
(
core
.
CPUPlace
())
...
...
@@ -74,7 +78,7 @@ class TestExpandV2ExpandShapesTensor1OneDNNOp(TestExpandV2OneDNNOp):
self
.
ori_shape
=
[
100
,
1
]
self
.
expand_times
=
[
1
,
2
]
self
.
expand_shape
=
[
100
,
2
]
self
.
shape
=
[
-
1
,
-
1
]
self
.
shape
=
[
100
,
2
]
def
calc_expand_shapes_tensor
(
self
):
self
.
expand_shapes_tensor
=
[]
...
...
@@ -82,12 +86,9 @@ class TestExpandV2ExpandShapesTensor1OneDNNOp(TestExpandV2OneDNNOp):
self
.
expand_shapes_tensor
.
append
((
"x"
+
str
(
index
),
np
.
ones
(
(
1
)).
astype
(
'int32'
)
*
ele
))
def
set_inputs
(
self
):
def
set_
additional_
inputs
(
self
):
self
.
calc_expand_shapes_tensor
()
self
.
inputs
=
{
'X'
:
self
.
x
,
'expand_shapes_tensor'
:
self
.
expand_shapes_tensor
}
self
.
inputs
[
'expand_shapes_tensor'
]
=
self
.
expand_shapes_tensor
class
TestExpandV2ExpandShapesTensor2OneDNNOp
(
...
...
@@ -104,13 +105,10 @@ class TestExpandV2ShapesTensorOneDNNOp(TestExpandV2OneDNNOp):
self
.
ori_shape
=
[
100
]
self
.
expand_times
=
[
2
,
1
]
self
.
expand_shape
=
[
2
,
100
]
self
.
shape
=
[
-
1
,
-
1
]
self
.
shape
=
[
2
,
100
]
def
set_inputs
(
self
):
self
.
inputs
=
{
'X'
:
self
.
x
,
'Shape'
:
np
.
array
(
self
.
expand_shape
).
astype
(
"int32"
)
}
def
set_additional_inputs
(
self
):
self
.
inputs
[
'Shape'
]
=
np
.
array
(
self
.
expand_shape
).
astype
(
"int32"
)
# BF16 TESTS
...
...
@@ -118,6 +116,7 @@ def create_expand_v2_bf16_test_class(parent):
@
OpTestTool
.
skip_if_not_cpu_bf16
()
class
TestExpandV2BF16OneDNNOp
(
parent
):
def
set_inputs
(
self
):
self
.
attrs
[
'mkldnn_data_type'
]
=
'bfloat16'
self
.
inputs
=
{
"X"
:
convert_float_to_uint16
(
self
.
x
)}
def
calculate_grads
(
self
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录