MCPcopy Create free account
hub / github.com/ROCm/AMDMIGraphX / update_pooling

Function update_pooling

src/insert_pad.cpp:73–106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71}
72
73static void update_pooling(const instruction_ref& input, const instruction_ref& ins, module& m)
74{
75 auto op = any_cast<op::pooling>(ins->get_operator());
76 if(op.mode == op::pooling_mode::average)
77 {
78 return;
79 }
80 auto kdims = input->get_shape().ndim() - 2;
81 if(std::equal(op.padding.begin(),
82 op.padding.begin() + kdims,
83 op.padding.begin() + kdims,
84 op.padding.end()))
85 return;
86
87 std::vector<int64_t> padding(input->get_shape().ndim() * 2, 0);
88 std::vector<size_t> pads_l(op.padding.begin(), op.padding.begin() + kdims);
89 std::vector<size_t> pads_r(op.padding.begin() + kdims, op.padding.end());
90 op.padding = std::vector<size_t>(kdims * 2, 0);
91 std::copy(pads_l.begin(), pads_l.end(), padding.begin() + 2);
92 std::copy(pads_r.begin(), pads_r.end(), padding.begin() + kdims + 2 + 2);
93
94 float pad_val = 0.0f; // for the lpnorm
95 if(op.mode == op::pooling_mode::max)
96 {
97 // maxpool uses lowest value for padding
98 pad_val = std::numeric_limits<float>::lowest();
99 }
100 auto pad_op = m.insert_instruction(ins, op::pad{padding, pad_val}, input);
101
102 auto new_inputs = ins->inputs();
103 new_inputs.front() = pad_op;
104
105 m.replace_instruction(ins, op, new_inputs);
106}
107
108void insert_pad::apply(module& m) const
109{

Callers 1

applyMethod · 0.70

Calls 11

ndimMethod · 0.80
insert_instructionMethod · 0.80
frontMethod · 0.80
replace_instructionMethod · 0.80
equalFunction · 0.50
copyFunction · 0.50
lowestClass · 0.50
get_shapeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
inputsMethod · 0.45

Tested by

no test coverage detected