@@ -157,12 +157,38 @@ static void CreateMatMulOp(Program& p, const std::shared_ptr<ngraph::op::v0::Mat
157
157
158
158
auto lastLayerName = layerName;
159
159
if (reshape_fc) {
160
- auto outputShape = tensor_from_dims (op->get_output_shape (0 ));
161
160
auto outReshapeName = layerName + " _cldnn_out_reshape" ;
162
- auto outReshapePrim = cldnn::reshape (outReshapeName, layerName, outputShape, op->get_friendly_name ());
161
+
162
+ // add reorder
163
+ auto outDims = op->get_output_shape (0 );
164
+ auto outTensor = tensor_from_dims (outDims);
165
+
166
+ if (outDims.size () > 4 ) {
167
+ cldnn::format outputFormat = cldnn::format::bfyx;
168
+ switch (outDims.size ()) {
169
+ case 5 : outputFormat = cldnn::format::bfzyx; break ;
170
+ case 6 : outputFormat = cldnn::format::bfwzyx; break ;
171
+ default : break ;
172
+ }
173
+
174
+ cldnn::primitive_id reorderId = " reorder:" + outReshapeName + " _reorder" ;
175
+ cldnn::layout outputLayout (DataTypeFromPrecision (op->get_output_element_type (0 )), outputFormat, outTensor);
176
+ p.AddPrimitive (cldnn::reorder (reorderId,
177
+ layerName,
178
+ outputLayout,
179
+ std::vector<float >(),
180
+ cldnn::reorder_mean_mode::subtract,
181
+ op->get_friendly_name ()));
182
+ p.InitProfileInfo (reorderId, " Reorder" , false , InferenceEngine::InferenceEngineProfileInfo::EXECUTED, layerName);
183
+ p.AddInnerPrimitiveToProfiler (reorderId, layerName, op);
184
+ lastLayerName = reorderId;
185
+ }
186
+
187
+ // add reshape
188
+ auto outReshapePrim = cldnn::reshape (outReshapeName, lastLayerName, outTensor, op->get_friendly_name ());
163
189
164
190
p.AddPrimitive (outReshapePrim);
165
- p.AddInnerPrimitiveToProfiler (outReshapeName, layerName , op);
191
+ p.AddInnerPrimitiveToProfiler (outReshapeName, lastLayerName , op);
166
192
167
193
lastLayerName = outReshapeName;
168
194
}
0 commit comments