diff --git a/paddle/fluid/operators/conv_mkldnn_op.cc b/paddle/fluid/operators/conv_mkldnn_op.cc index aec34421b6c9f4f28a896cbfb07f49dc1396beaf..35499e91ea053e7e2f939253a079effd1229b0f9 100644 --- a/paddle/fluid/operators/conv_mkldnn_op.cc +++ b/paddle/fluid/operators/conv_mkldnn_op.cc @@ -373,26 +373,32 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel { src_tz, weights_tz, strides, paddings, dilations, groups, ctx.op().Output("Output")); const std::string key_conv_pd = key + "@conv_pd"; - static std::unordered_map> scale_map; + static std::unordered_map>> scale_map; //scale_map.insert({key_conv_pd,{1.0f}}); //scale_map[key_conv_pd]={0.1f}; bool scale_reuse = true; - auto scale_in_key = key + "@scale_in"; - auto scale_weights_key = key + "@scale_weights"; - auto scale_out_key = key + "@scale_out"; - auto output_shift_scale_key = key + "@output_shift_scale"; - auto sum_scale_key = key + "@sum_scale"; - auto scale_in_eltwise_key = key + "@scale_in_eltwise"; + //auto scale_in_key = key + "@scale_in"; + //auto scale_weights_key = key + "@scale_weights"; + //auto scale_out_key = key + "@scale_out"; + //auto output_shift_scale_key = key + "@output_shift_scale"; + //auto sum_scale_key = key + "@sum_scale"; + //auto scale_in_eltwise_key = key + "@scale_in_eltwise"; std::vector scale_in_data; std::vector scale_out_data; std::vector scale_weights_data; - std::vector scale_in_eltwise_data; + std::vector scale_in_eltwise_data = {1.0f}; std::vector output_shift_scale; std::vector sum_scale = {1.0f}; - std::vector none_scale = {0.0f}; + std::vector scale_bias_data = {1.0f}; + std::vector> none_scale = {{0.0f}}; + std::vector> scale_datas(7,{1.0f}); - if (is_INT8 && GetScaleMap(scale_map, scale_in_key) == none_scale){ +//scale_in_data 0, scale_in_eltwise_data 1, scale_weights_data 2, scale_bias_data 3, scale_out_data 4, output_shift_scale 5, sum_scale 6 + + if (is_INT8 && GetScaleMap(scale_map, key) == none_scale){ scale_reuse = false; + } else{ + scale_datas = GetScaleMap(scale_map, key); } //std::cout<<"scale_reuse = "< { if(fuse_residual_conn){ scale_in_eltwise_data = {*(scale_in_eltwise->data())}; sum_scale[0] = scale_out_data[0] / scale_in_eltwise_data[0]; - SetScaleMap(scale_map, scale_in_eltwise_key, scale_in_eltwise_data); + //SetScaleMap(scale_map, scale_in_eltwise_key, scale_in_eltwise_data); } //scale reuse - SetScaleMap(scale_map, scale_in_key, scale_in_data); - SetScaleMap(scale_map, scale_weights_key, scale_weights_data); - SetScaleMap(scale_map, scale_out_key, scale_out_data); - SetScaleMap(scale_map, output_shift_scale_key, output_shift_scale); - SetScaleMap(scale_map, sum_scale_key, sum_scale); + scale_datas[0] = scale_in_data; + scale_datas[1] = scale_in_eltwise_data; + scale_datas[2] = scale_weights_data; + scale_datas[4] = scale_out_data; + scale_datas[5] = output_shift_scale; + scale_datas[6] = sum_scale; + //SetScaleMap(scale_map, key, scale_datas); + //SetScaleMap(scale_map, scale_weights_key, scale_weights_data); + //SetScaleMap(scale_map, scale_out_key, scale_out_data); + //SetScaleMap(scale_map, output_shift_scale_key, output_shift_scale); + //SetScaleMap(scale_map, sum_scale_key, sum_scale); } else{ - scale_in_data = GetScaleMap(scale_map, scale_in_key); - scale_out_data = GetScaleMap(scale_map, scale_out_key); - scale_weights_data = GetScaleMap(scale_map, scale_weights_key); + scale_in_data = scale_datas[0]; + scale_out_data = scale_datas[3]; + scale_weights_data = scale_datas[2]; if(fuse_residual_conn){ - scale_in_eltwise_data = GetScaleMap(scale_map, scale_in_eltwise_key); + scale_in_eltwise_data = scale_datas[1]; } - output_shift_scale = GetScaleMap(scale_map, output_shift_scale_key); - sum_scale = GetScaleMap(scale_map, sum_scale_key); + output_shift_scale = scale_datas[5]; + sum_scale = scale_datas[6]; //printf("pause!!!"); } @@ -693,8 +705,7 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel { // create convolution op primitive std::shared_ptr conv_p; - std::vector scale_bias_data; - auto scale_bias_key = key + "@scale_bias"; + //auto scale_bias_key = key + "@scale_bias"; auto user_bias_md_key = key + "@user_bias_md"; if (bias) { const float* bias_data = bias->data(); @@ -718,9 +729,10 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel { for(int i=0; i { dst_memory_p); } + SetScaleMap(scale_map, key, scale_datas); // push primitive to stream and wait until it's executed pipeline.push_back(*conv_p); @@ -750,33 +763,33 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel { private: - void SetScaleMap(std::unordered_map> &scale_map, - const std::string& name, std::vector scale_data) const { + void SetScaleMap(std::unordered_map>> &scale_map, + const std::string& name, std::vector> scale_datas) const { auto it = scale_map.find(name); if (it == scale_map.end()) { - scale_map[name] = scale_data; // create new blob + scale_map[name] = scale_datas; // create new blob } else { - (*it).second = scale_data; // set data to existing blob + (*it).second = scale_datas; // set data to existing blob } return; } - std::vector GetScaleMap(std::unordered_map> scale_map, + std::vector> GetScaleMap(std::unordered_map>> scale_map, const std::string& name) const { auto it = scale_map.find(name); if (it != scale_map.end()) { return (*it).second; } - return {0.0f}; + return {{0.0f}}; } void SetMdMap(std::unordered_map> &md_map, - const std::string& name, std::shared_ptr md) const { + const std::string& name, std::shared_ptr mds) const { auto it = md_map.find(name); if (it == md_map.end()) { - md_map[name] = md; // create new blob + md_map[name] = mds; // create new blob } else { - (*it).second = md; // set data to existing blob + (*it).second = mds; // set data to existing blob } return; }