Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

optimization batch_norm 2D and NCHW format on CPU #34585

Merged
merged 5 commits into from
Aug 9, 2021

Conversation

Zjq9409
Copy link
Contributor

@Zjq9409 Zjq9409 commented Aug 3, 2021

PR types

Performance optimization

PR changes

OPs

Describe

Optimization batch_norm two-dimensional shape and the format is NCHW
The performance test data of OMP==1 is as follows:
image

@paddle-bot-old
Copy link

paddle-bot-old bot commented Aug 3, 2021

Thanks for your contribution!
Please wait for the result of CI firstly. See Paddle CI Manual for details.

@JamesLim-sy
Copy link
Contributor

LGTM

@Zjq9409 Zjq9409 changed the title optimization channel optimization 2D and NCHW format Aug 9, 2021
@Zjq9409 Zjq9409 changed the title optimization 2D and NCHW format optimization batch_norm2D and NCHW format Aug 9, 2021
@Zjq9409 Zjq9409 changed the title optimization batch_norm2D and NCHW format optimization batch_norm 2D and NCHW format on CPU Aug 9, 2021
Copy link
Contributor

@Xreki Xreki left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@@ -332,6 +331,12 @@ class BatchNormKernel<platform::CPUDeviceContext, T>
saved_mean->mutable_data<T>(ctx.GetPlace());
saved_variance->mutable_data<T>(ctx.GetPlace());

// input dimension is 2 and the format is NCHW. The input can be regarded
// as NHWC format
if (x_dims.size() == 2 && data_layout == DataLayout::kNCHW) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

判断条件其实可以简化下,是不是if (sample_size == 1)就可以了?以及代码书写也可以简化下:const DataLayout data_layout = sample_size == 1 ? DataLayout::kNHWC : framework::StringToDataLayout(data_layout_str);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

经过验证,在sample_size为1时,在代码"const int C = (data_layout == DataLayout::kNCHW ? x_dims[1]: x_dims[x_dims.size() - 1]);" 执行完成后获取到C的值,再使用sample_size==1判断修改layout是可以的。根据建议修改

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

但是对于简化的写法应该是不可行的,因为如果这里直接修改data_layout的话,后续会通过这个data_layout来计算C的值,如果输入为[10,10,1,1],输入格式为"NCHW",sample_size==1,满足条件,这时输入格式改为"NHWC",后续计算C会等于1,而实际上C=10.

@Xreki Xreki merged commit 56759ff into PaddlePaddle:develop Aug 9, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants