From 25a97298e40881e83db93338159f464c9914be76 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Thu, 17 Nov 2022 03:42:23 -0800 Subject: [PATCH 01/11] [RUNTIME][CLML] Add fixes to clml runtime Handled unsupported configuration for ops in clml pattern table and updated Dense op runtime api with conv 1x1 kernel api invocation. --- python/tvm/relay/op/contrib/clml.py | 5 ++- src/relay/backend/contrib/clml/codegen.cc | 30 ++++++++++++++-- src/relay/backend/contrib/clml/target.cc | 42 +++++++++++++++++++++++ src/runtime/contrib/clml/clml_runtime.cc | 37 +++++++++++++------- 4 files changed, 96 insertions(+), 18 deletions(-) create mode 100644 src/relay/backend/contrib/clml/target.cc diff --git a/python/tvm/relay/op/contrib/clml.py b/python/tvm/relay/op/contrib/clml.py index d253544d45d9..4ff918d0986c 100644 --- a/python/tvm/relay/op/contrib/clml.py +++ b/python/tvm/relay/op/contrib/clml.py @@ -137,11 +137,10 @@ def conv_pattern(): pattern = pattern.optional(lambda x: is_op("nn.bias_add")(x, is_constant())) pattern = pattern.optional(lambda x: is_op("add")(x, is_constant())) pattern = pattern.optional( - lambda x: is_op("nn.batch_norm")( + lambda x: is_tuple_get_item(is_op("nn.batch_norm")( x, is_constant(), is_constant(), is_constant(), is_constant() - ) + )) ) - pattern = pattern.optional(is_tuple_get_item) pattern = pattern.optional(is_op("nn.relu")) pattern = pattern.optional(is_op("clip")) return pattern diff --git a/src/relay/backend/contrib/clml/codegen.cc b/src/relay/backend/contrib/clml/codegen.cc index b89f05e17857..bd6545832234 100644 --- a/src/relay/backend/contrib/clml/codegen.cc +++ b/src/relay/backend/contrib/clml/codegen.cc @@ -94,7 +94,7 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { } else if (name == "clml.concat") { json_node = CreateConcatJSONNode(cn); } else { - LOG(FATAL) << "Unrecognized CLML pattern: " << name; + json_node = CreateGenericJSONNode(cn); } return AddNode(json_node, GetRef(cn)); } @@ -164,7 +164,7 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { nodes.bn = current_call; current_call = current_call->args[0].as(); } - if (backend::IsOp(current_call, "add")) { + if (backend::IsOp(current_call, "add") || backend::IsOp(current_call, "nn.bias_add")) { nodes.bias = current_call; current_call = current_call->args[0].as(); } @@ -387,6 +387,32 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { return json_node; } + + std::shared_ptr CreateGenericJSONNode(const CallNode* cn) { + const auto* fn = cn->op.as(); + ICHECK(fn); + const auto* node = fn->body.as(); + + const auto* node_op = node->op.as(); + ICHECK(node_op); + const std::string name = node_op->name; + + std::vector inputs; + //inputs.push_back(VisitExpr(cn->args[0])[0]); + unsigned int i=0; + for (i=0; iargs.size(); i++) { + inputs.push_back(VisitExpr(cn->args[i])[0]); + } + for (unsigned int j=i; jargs.size(); j++) { + inputs.push_back(VisitExpr(node->args[j])[0]); + } + + auto json_node = std::make_shared(name, "kernel", inputs, 1); + SetCallNodeAttribute(json_node, node); + return json_node; + } + + }; /*! diff --git a/src/relay/backend/contrib/clml/target.cc b/src/relay/backend/contrib/clml/target.cc new file mode 100644 index 000000000000..bf5c335e0883 --- /dev/null +++ b/src/relay/backend/contrib/clml/target.cc @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/*! + * \file src/relay/backend/contrib/cudnn/target.cc + * \brief Registers the "cudnn" external codegen TargetKind. + */ + +#include + +namespace tvm { +namespace relay { +namespace contrib { + +/*! + * \brief This external codegen target can use the CuDNN library linked into the TVM runtime. + * - Patterns and custom compiler: python/tvm/relay/op/contrib/cudnn.py + * - Custom schedules: python/tvm/contrib/cudnn.py + * - Runtime: src/runtime/contrib/cudnn/ *.cc + */ +TVM_REGISTER_TARGET_KIND("clml", kDLOpenCL) + .set_attr(tvm::attr::kIsExternalCodegen, Bool(true)); + +} // namespace contrib +} // namespace relay +} diff --git a/src/runtime/contrib/clml/clml_runtime.cc b/src/runtime/contrib/clml/clml_runtime.cc index cdc3b9a7b51c..30a3c9793381 100644 --- a/src/runtime/contrib/clml/clml_runtime.cc +++ b/src/runtime/contrib/clml/clml_runtime.cc @@ -1144,28 +1144,39 @@ class CLMLRuntime : public JSONRuntimeBase { CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype); auto wt_dims = get_tensor_dims(nodes_[node.GetInputs()[1].id_]); bool has_bias = node.GetInputs().size() == 3 ? true : false; - auto weight = MakeCLMLTensorFromJSONEntry(node.GetInputs()[1], {1, 1, wt_dims.n, wt_dims.c}, + auto weight = MakeCLMLTensorFromJSONEntry(node.GetInputs()[1], {wt_dims.n, wt_dims.c, 1, 1}, CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype); + auto bias = std::make_shared(); if (has_bias) { auto bias_dims = get_tensor_dims(nodes_[node.GetInputs()[2].id_]); bias = MakeCLMLTensorFromJSONEntry(node.GetInputs()[2], {1, bias_dims.c, 1, 1}, CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype); + } else { + cl_ml_tensor_desc_qcom desc = {}; + desc.num_dimensions = CL_TENSOR_UNUSED_QCOM; + result = h_ClmlIntf->clCreateMLTensorQCOM(workspace->context, NULL, &desc, &layer_.unusedTensor); + ICHECK(layer_.unusedTensor && result == CL_SUCCESS) << "clCreateMLTensorQCOM:" << result; + bias->tensor = layer_.unusedTensor; } + // Output + auto output = MakeCLMLTensorFromJSONNode(node, CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype, + nullptr, {1, wt_dims.n, 1, 1}); + cl_ml_op_convolution_desc_qcom conv_desc = {CL_CONVOLUTION_MODE_CONVOLUTION_QCOM, + 1, + 4, + {0, 0}, + {0, 0}, + {1, 1}, + {1, 1}, + 0, + cl_arithmetic_mode}; - cl_ml_op_fully_connected_desc_qcom fc_desc = {1, CL_FC_WEIGHT_TRANSFORM_TRANSPOSE_QCOM, - cl_arithmetic_mode}; - auto output = MakeCLMLTensorFromJSONNode(node, CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype); - if (has_bias) { - result = h_ClmlIntf->clCreateMLOpFullyConnectedQCOM( - workspace->context, 0, &fc_desc, input->tensor, weight->tensor, bias->tensor, - output->tensor, &op, tuning_cache); - } else { - result = h_ClmlIntf->clCreateMLOpFullyConnectedQCOM(workspace->context, 0, &fc_desc, - input->tensor, weight->tensor, NULL, - output->tensor, &op, tuning_cache); - } + + result = h_ClmlIntf->clCreateMLOpConvolutionForwardQCOM( + workspace->context, 0, &conv_desc, input->tensor, weight->tensor, bias->tensor, + output->tensor, &op, NULL); ICHECK(op && result == CL_SUCCESS) << "Fully Connected Error:" << result; layer->function.push_back(op); From fc6f0a10c3e970720fefad60d41c49046b3d0912 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Thu, 17 Nov 2022 20:27:58 -0800 Subject: [PATCH 02/11] [RUNTIME][CLML] Add fixes to clml runtime Handled unsupported configuration for ops in clml pattern table and updated Dense op runtime api with conv 1x1 kernel api invocation. --- python/tvm/relay/op/contrib/clml.py | 62 +++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/python/tvm/relay/op/contrib/clml.py b/python/tvm/relay/op/contrib/clml.py index 4ff918d0986c..9e4ffe57ad9b 100644 --- a/python/tvm/relay/op/contrib/clml.py +++ b/python/tvm/relay/op/contrib/clml.py @@ -175,12 +175,13 @@ def dense_pattern(): def pad_pattern(): """Create a pad pattern.""" - pattern = is_op("nn.pad")(wildcard(), wildcard()) + pattern = is_op("nn.pad")(wildcard(), is_constant()) return pattern def check_conv(extract): """Check conv pattern is supported by CLML.""" call = extract + clip_found = False if isinstance(call, tvm.relay.expr.TupleGetItem): call = call.tuple_value elif call.op.name == "nn.relu": @@ -188,6 +189,7 @@ def check_conv(extract): if isinstance(call, tvm.relay.expr.TupleGetItem): call = call.tuple_value elif call.op.name == "clip": + clip_found = True if call.attrs["a_min"] != 0.0 or call.attrs["a_max"] != 6.0: return False call = call.args[0] @@ -199,6 +201,12 @@ def check_conv(extract): attrs, args = call.attrs, call.args if attrs.data_layout != "NCHW": return False + if ( + (clip_found == False) and (attrs.kernel_size[0] == 3) + and (attrs.dilation[0] != 1) and (attrs.groups != 1) + and (attrs.channels == attrs.groups) + ): + return False data_typ = args[0].checked_type kernel_typ = args[1].checked_type is_depthwise = is_depthwise_conv2d( @@ -212,12 +220,44 @@ def check_conv(extract): return False return True + def check_binary_op(extract): + call = extract + if (len(call.args[1].checked_type.shape)>0): + return True + return False + + def check_pad_op(extract): + call = extract + if(len(call.attrs["pad_width"]) != 4): + return False + return True + + def check_softmax_op(extract): + call = extract + if len(call.args[0].checked_type.shape) > 2: + return False + return True + + def check_default_op(extract): + return True + return [ ("clml.conv2d", conv_pattern(), check_conv), - ("clml.dense", dense_pattern()), - ("clml.pad", pad_pattern()), - ("clml.concat", concat_pattern()), - ("clml.batch_norm", batch_norm_pattern()), + ("clml.dense", dense_pattern(), check_default_op), + ("clml.pad", pad_pattern(), check_pad_op), + ("clml.concat", concat_pattern(), check_default_op), + ("clml.batch_norm", batch_norm_pattern(), check_default_op), + ("clml.add", is_op("add")(wildcard(), wildcard()), check_binary_op), + ("clml.subtract", is_op("subtract")(wildcard(), wildcard()), check_binary_op), + ("clml.multiply", is_op("multiply")(wildcard(), wildcard()), check_binary_op), + ("clml.softmax", is_op("nn.softmax")(wildcard()), check_softmax_op), + ("clml.reshape", is_op("reshape")(wildcard()), check_default_op), + ("clml.avg_pool2d", is_op("nn.avg_pool2d")(wildcard()), check_default_op), + ("clml.max_pool2d", is_op("nn.max_pool2d")(wildcard()), check_default_op), + ("clml.global_avg_pool2d", is_op("nn.global_avg_pool2d")(wildcard()), check_default_op), + ("clml.global_max_pool2d", is_op("nn.global_max_pool2d")(wildcard()), check_default_op), + ("clml.relu", is_op("nn.relu")(wildcard()), check_default_op), + ("clml.clip", is_op("clip")(wildcard()), check_default_op), ] @@ -228,18 +268,6 @@ def _func_wrapper(expr): return _func_wrapper - -_register_external_op_helper("clip") -_register_external_op_helper("nn.relu") -_register_external_op_helper("nn.global_avg_pool2d") -_register_external_op_helper("nn.global_max_pool2d") -_register_external_op_helper("nn.avg_pool2d") -_register_external_op_helper("nn.max_pool2d") -_register_external_op_helper("nn.softmax") -_register_external_op_helper("reshape") -_register_external_op_helper("add") -_register_external_op_helper("subtract") -_register_external_op_helper("multiply") _register_external_op_helper("minimum") _register_external_op_helper("maximum") From 8d6b67d1236d496417a124a22b2b7609fa4c5a15 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Thu, 17 Nov 2022 22:33:55 -0800 Subject: [PATCH 03/11] Fix the lint error for clml.py --- python/tvm/relay/op/contrib/clml.py | 21 +++++++++++++-------- src/relay/backend/contrib/clml/target.cc | 11 +++++------ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/python/tvm/relay/op/contrib/clml.py b/python/tvm/relay/op/contrib/clml.py index 9e4ffe57ad9b..c72af59fff37 100644 --- a/python/tvm/relay/op/contrib/clml.py +++ b/python/tvm/relay/op/contrib/clml.py @@ -137,9 +137,11 @@ def conv_pattern(): pattern = pattern.optional(lambda x: is_op("nn.bias_add")(x, is_constant())) pattern = pattern.optional(lambda x: is_op("add")(x, is_constant())) pattern = pattern.optional( - lambda x: is_tuple_get_item(is_op("nn.batch_norm")( - x, is_constant(), is_constant(), is_constant(), is_constant() - )) + lambda x: is_tuple_get_item( + is_op("nn.batch_norm")( + x, is_constant(), is_constant(), is_constant(), is_constant() + ) + ) ) pattern = pattern.optional(is_op("nn.relu")) pattern = pattern.optional(is_op("clip")) @@ -202,8 +204,10 @@ def check_conv(extract): if attrs.data_layout != "NCHW": return False if ( - (clip_found == False) and (attrs.kernel_size[0] == 3) - and (attrs.dilation[0] != 1) and (attrs.groups != 1) + (clip_found == False) + and (attrs.kernel_size[0] == 3) + and (attrs.dilation[0] != 1) + and (attrs.groups != 1) and (attrs.channels == attrs.groups) ): return False @@ -222,15 +226,15 @@ def check_conv(extract): def check_binary_op(extract): call = extract - if (len(call.args[1].checked_type.shape)>0): + if len(call.args[1].checked_type.shape)>0: return True return False def check_pad_op(extract): call = extract - if(len(call.attrs["pad_width"]) != 4): + if len(call.attrs["pad_width"]) != 4: return False - return True + return True def check_softmax_op(extract): call = extract @@ -268,6 +272,7 @@ def _func_wrapper(expr): return _func_wrapper + _register_external_op_helper("minimum") _register_external_op_helper("maximum") diff --git a/src/relay/backend/contrib/clml/target.cc b/src/relay/backend/contrib/clml/target.cc index bf5c335e0883..dff80316cbdd 100644 --- a/src/relay/backend/contrib/clml/target.cc +++ b/src/relay/backend/contrib/clml/target.cc @@ -18,8 +18,8 @@ */ /*! - * \file src/relay/backend/contrib/cudnn/target.cc - * \brief Registers the "cudnn" external codegen TargetKind. + * \file src/relay/backend/contrib/clml/target.cc + * \brief Registers the "clml" external codegen TargetKind. */ #include @@ -29,10 +29,9 @@ namespace relay { namespace contrib { /*! - * \brief This external codegen target can use the CuDNN library linked into the TVM runtime. - * - Patterns and custom compiler: python/tvm/relay/op/contrib/cudnn.py - * - Custom schedules: python/tvm/contrib/cudnn.py - * - Runtime: src/runtime/contrib/cudnn/ *.cc + * \brief This external codegen target can use the CLML library linked into the TVM runtime. + * - Patterns and custom compiler: python/tvm/relay/op/contrib/clml.py + * - Runtime: src/runtime/contrib/clml/clml_runtime.cc */ TVM_REGISTER_TARGET_KIND("clml", kDLOpenCL) .set_attr(tvm::attr::kIsExternalCodegen, Bool(true)); From 505bc19c0a583e805de653b25f5cffa04e93c1d0 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Thu, 17 Nov 2022 22:44:35 -0800 Subject: [PATCH 04/11] Fix the lint error for whitespace --- src/relay/backend/contrib/clml/codegen.cc | 2 +- src/runtime/contrib/clml/clml_runtime.cc | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/relay/backend/contrib/clml/codegen.cc b/src/relay/backend/contrib/clml/codegen.cc index bd6545832234..3d132d86fd50 100644 --- a/src/relay/backend/contrib/clml/codegen.cc +++ b/src/relay/backend/contrib/clml/codegen.cc @@ -399,7 +399,7 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { std::vector inputs; //inputs.push_back(VisitExpr(cn->args[0])[0]); - unsigned int i=0; + unsigned int i=0; for (i=0; iargs.size(); i++) { inputs.push_back(VisitExpr(cn->args[i])[0]); } diff --git a/src/runtime/contrib/clml/clml_runtime.cc b/src/runtime/contrib/clml/clml_runtime.cc index 30a3c9793381..c825642034a3 100644 --- a/src/runtime/contrib/clml/clml_runtime.cc +++ b/src/runtime/contrib/clml/clml_runtime.cc @@ -1173,7 +1173,6 @@ class CLMLRuntime : public JSONRuntimeBase { cl_arithmetic_mode}; - result = h_ClmlIntf->clCreateMLOpConvolutionForwardQCOM( workspace->context, 0, &conv_desc, input->tensor, weight->tensor, bias->tensor, output->tensor, &op, NULL); From d5823c3e816a9ad50ad20747c1bfd2ad8e6a161f Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Thu, 17 Nov 2022 22:50:18 -0800 Subject: [PATCH 05/11] Fix the lint error for space --- python/tvm/relay/op/contrib/clml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/tvm/relay/op/contrib/clml.py b/python/tvm/relay/op/contrib/clml.py index c72af59fff37..54eea7c63549 100644 --- a/python/tvm/relay/op/contrib/clml.py +++ b/python/tvm/relay/op/contrib/clml.py @@ -226,7 +226,7 @@ def check_conv(extract): def check_binary_op(extract): call = extract - if len(call.args[1].checked_type.shape)>0: + if len(call.args[1].checked_type.shape) > 0: return True return False From b70f7afa481054145c06cacdb74515dab8fee6b8 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Thu, 17 Nov 2022 23:03:39 -0800 Subject: [PATCH 06/11] Fix the lint error for if condition --- python/tvm/relay/op/contrib/clml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/tvm/relay/op/contrib/clml.py b/python/tvm/relay/op/contrib/clml.py index 54eea7c63549..c3d4eb84700d 100644 --- a/python/tvm/relay/op/contrib/clml.py +++ b/python/tvm/relay/op/contrib/clml.py @@ -204,7 +204,7 @@ def check_conv(extract): if attrs.data_layout != "NCHW": return False if ( - (clip_found == False) + (not clip_found) and (attrs.kernel_size[0] == 3) and (attrs.dilation[0] != 1) and (attrs.groups != 1) From 6ee1444549407e2396f004e45e71e0c848205b2f Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Fri, 18 Nov 2022 00:45:17 -0800 Subject: [PATCH 07/11] Fixes for lint error of whitespace --- src/relay/backend/contrib/clml/codegen.cc | 9 +++------ src/relay/backend/contrib/clml/target.cc | 2 +- src/runtime/contrib/clml/clml_runtime.cc | 3 ++- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/relay/backend/contrib/clml/codegen.cc b/src/relay/backend/contrib/clml/codegen.cc index 3d132d86fd50..fc0a19c6bbcc 100644 --- a/src/relay/backend/contrib/clml/codegen.cc +++ b/src/relay/backend/contrib/clml/codegen.cc @@ -398,21 +398,18 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { const std::string name = node_op->name; std::vector inputs; - //inputs.push_back(VisitExpr(cn->args[0])[0]); - unsigned int i=0; - for (i=0; iargs.size(); i++) { + unsigned int i = 0; + for (i=0; i < cn->args.size(); i++) { inputs.push_back(VisitExpr(cn->args[i])[0]); } - for (unsigned int j=i; jargs.size(); j++) { + for (unsigned int j=i; j < node->args.size(); j++) { inputs.push_back(VisitExpr(node->args[j])[0]); } - auto json_node = std::make_shared(name, "kernel", inputs, 1); SetCallNodeAttribute(json_node, node); return json_node; } - }; /*! diff --git a/src/relay/backend/contrib/clml/target.cc b/src/relay/backend/contrib/clml/target.cc index dff80316cbdd..c7f22c1315c8 100644 --- a/src/relay/backend/contrib/clml/target.cc +++ b/src/relay/backend/contrib/clml/target.cc @@ -38,4 +38,4 @@ TVM_REGISTER_TARGET_KIND("clml", kDLOpenCL) } // namespace contrib } // namespace relay -} +} // namespace tvm diff --git a/src/runtime/contrib/clml/clml_runtime.cc b/src/runtime/contrib/clml/clml_runtime.cc index c825642034a3..b8ed2540a417 100644 --- a/src/runtime/contrib/clml/clml_runtime.cc +++ b/src/runtime/contrib/clml/clml_runtime.cc @@ -1155,7 +1155,8 @@ class CLMLRuntime : public JSONRuntimeBase { } else { cl_ml_tensor_desc_qcom desc = {}; desc.num_dimensions = CL_TENSOR_UNUSED_QCOM; - result = h_ClmlIntf->clCreateMLTensorQCOM(workspace->context, NULL, &desc, &layer_.unusedTensor); + result = h_ClmlIntf->clCreateMLTensorQCOM(workspace->context, NULL, &desc, + &layer_.unusedTensor); ICHECK(layer_.unusedTensor && result == CL_SUCCESS) << "clCreateMLTensorQCOM:" << result; bias->tensor = layer_.unusedTensor; } From d76d16ca397bafdf22839e8cff2dcc2939ec8b29 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Fri, 18 Nov 2022 00:56:50 -0800 Subject: [PATCH 08/11] Fixes for lint error of trailing space --- src/relay/backend/contrib/clml/codegen.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/relay/backend/contrib/clml/codegen.cc b/src/relay/backend/contrib/clml/codegen.cc index fc0a19c6bbcc..15812a77f614 100644 --- a/src/relay/backend/contrib/clml/codegen.cc +++ b/src/relay/backend/contrib/clml/codegen.cc @@ -398,7 +398,7 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { const std::string name = node_op->name; std::vector inputs; - unsigned int i = 0; + unsigned int i = 0; for (i=0; i < cn->args.size(); i++) { inputs.push_back(VisitExpr(cn->args[i])[0]); } From d31970c9ed0ccdf183572748a283467c5a85dbbb Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Fri, 18 Nov 2022 01:11:47 -0800 Subject: [PATCH 09/11] Fixes for lint error of trailing space --- src/relay/backend/contrib/clml/codegen.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/relay/backend/contrib/clml/codegen.cc b/src/relay/backend/contrib/clml/codegen.cc index 15812a77f614..08f4bcf3f354 100644 --- a/src/relay/backend/contrib/clml/codegen.cc +++ b/src/relay/backend/contrib/clml/codegen.cc @@ -409,7 +409,6 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { SetCallNodeAttribute(json_node, node); return json_node; } - }; /*! From 01796db91a123ef3197dde10135255dd38688383 Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Fri, 18 Nov 2022 01:38:23 -0800 Subject: [PATCH 10/11] Fixes for lint error of whitespace --- src/relay/backend/contrib/clml/codegen.cc | 4 ++-- src/runtime/contrib/clml/clml_runtime.cc | 29 +++++++++++------------ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/relay/backend/contrib/clml/codegen.cc b/src/relay/backend/contrib/clml/codegen.cc index 08f4bcf3f354..9ecec0c4531f 100644 --- a/src/relay/backend/contrib/clml/codegen.cc +++ b/src/relay/backend/contrib/clml/codegen.cc @@ -399,10 +399,10 @@ class CLMLJSONSerializer : public backend::contrib::JSONSerializer { std::vector inputs; unsigned int i = 0; - for (i=0; i < cn->args.size(); i++) { + for (i = 0; i < cn->args.size(); i++) { inputs.push_back(VisitExpr(cn->args[i])[0]); } - for (unsigned int j=i; j < node->args.size(); j++) { + for (unsigned int j = i; j < node->args.size(); j++) { inputs.push_back(VisitExpr(node->args[j])[0]); } auto json_node = std::make_shared(name, "kernel", inputs, 1); diff --git a/src/runtime/contrib/clml/clml_runtime.cc b/src/runtime/contrib/clml/clml_runtime.cc index b8ed2540a417..74a29545ffdd 100644 --- a/src/runtime/contrib/clml/clml_runtime.cc +++ b/src/runtime/contrib/clml/clml_runtime.cc @@ -1155,28 +1155,27 @@ class CLMLRuntime : public JSONRuntimeBase { } else { cl_ml_tensor_desc_qcom desc = {}; desc.num_dimensions = CL_TENSOR_UNUSED_QCOM; - result = h_ClmlIntf->clCreateMLTensorQCOM(workspace->context, NULL, &desc, - &layer_.unusedTensor); + result = + h_ClmlIntf->clCreateMLTensorQCOM(workspace->context, NULL, &desc, &layer_.unusedTensor); ICHECK(layer_.unusedTensor && result == CL_SUCCESS) << "clCreateMLTensorQCOM:" << result; bias->tensor = layer_.unusedTensor; } // Output - auto output = MakeCLMLTensorFromJSONNode(node, CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype, - nullptr, {1, wt_dims.n, 1, 1}); + auto output = MakeCLMLTensorFromJSONNode(node, CL_TENSOR_LAYOUT_OPTIMAL_QCOM, cl_dtype, nullptr, + {1, wt_dims.n, 1, 1}); cl_ml_op_convolution_desc_qcom conv_desc = {CL_CONVOLUTION_MODE_CONVOLUTION_QCOM, - 1, - 4, - {0, 0}, - {0, 0}, - {1, 1}, - {1, 1}, - 0, - cl_arithmetic_mode}; - + 1, + 4, + {0, 0}, + {0, 0}, + {1, 1}, + {1, 1}, + 0, + cl_arithmetic_mode}; result = h_ClmlIntf->clCreateMLOpConvolutionForwardQCOM( - workspace->context, 0, &conv_desc, input->tensor, weight->tensor, bias->tensor, - output->tensor, &op, NULL); + workspace->context, 0, &conv_desc, input->tensor, weight->tensor, bias->tensor, + output->tensor, &op, NULL); ICHECK(op && result == CL_SUCCESS) << "Fully Connected Error:" << result; layer->function.push_back(op); From 4b61520439c992c95ee66d249eca84a26f00617d Mon Sep 17 00:00:00 2001 From: kvegiraj Date: Fri, 18 Nov 2022 01:50:22 -0800 Subject: [PATCH 11/11] Fixes for lint error of trailingspace --- src/runtime/contrib/clml/clml_runtime.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/contrib/clml/clml_runtime.cc b/src/runtime/contrib/clml/clml_runtime.cc index 74a29545ffdd..7492e521b7f5 100644 --- a/src/runtime/contrib/clml/clml_runtime.cc +++ b/src/runtime/contrib/clml/clml_runtime.cc @@ -1155,7 +1155,7 @@ class CLMLRuntime : public JSONRuntimeBase { } else { cl_ml_tensor_desc_qcom desc = {}; desc.num_dimensions = CL_TENSOR_UNUSED_QCOM; - result = + result = h_ClmlIntf->clCreateMLTensorQCOM(workspace->context, NULL, &desc, &layer_.unusedTensor); ICHECK(layer_.unusedTensor && result == CL_SUCCESS) << "clCreateMLTensorQCOM:" << result; bias->tensor = layer_.unusedTensor;