| @@ -91,7 +91,8 @@ static std::map<string, string> tbe_func_adapter_map = { | |||||
| {"s_gd", "sgd"}, | {"s_gd", "sgd"}, | ||||
| {"l_ars_update", "lars_v2_update"}, | {"l_ars_update", "lars_v2_update"}, | ||||
| {"n_ms_with_mask", "nms_with_mask"}, | {"n_ms_with_mask", "nms_with_mask"}, | ||||
| {"square_sum_all", "square_sum_all"}}; | |||||
| {"square_sum_all", "square_sum_all"}, | |||||
| {"cum_sum", "cumsum_d"}}; | |||||
| void TbeAdapter::NormalizeFuncName(std::string *func_name) { | void TbeAdapter::NormalizeFuncName(std::string *func_name) { | ||||
| if (func_name == nullptr) { | if (func_name == nullptr) { | ||||
| @@ -166,6 +166,7 @@ const PrimitivePtr kPrimSquare = std::make_shared<Primitive>("Square"); | |||||
| const PrimitivePtr kPrimEqual = std::make_shared<Primitive>("Equal"); | const PrimitivePtr kPrimEqual = std::make_shared<Primitive>("Equal"); | ||||
| const PrimitivePtr kPrimLess = std::make_shared<Primitive>("Less"); | const PrimitivePtr kPrimLess = std::make_shared<Primitive>("Less"); | ||||
| const PrimitivePtr kPrimLessEqual = std::make_shared<Primitive>("LessEqual"); | const PrimitivePtr kPrimLessEqual = std::make_shared<Primitive>("LessEqual"); | ||||
| const PrimitivePtr kPrimCumSum = std::make_shared<Primitive>("CumSum"); | |||||
| // NN | // NN | ||||
| const PrimitivePtr kPrimFlatten = std::make_shared<Primitive>("Flatten"); | const PrimitivePtr kPrimFlatten = std::make_shared<Primitive>("Flatten"); | ||||
| @@ -172,6 +172,7 @@ extern const PrimitivePtr kPrimSquare; | |||||
| extern const PrimitivePtr kPrimEqual; | extern const PrimitivePtr kPrimEqual; | ||||
| extern const PrimitivePtr kPrimLess; | extern const PrimitivePtr kPrimLess; | ||||
| extern const PrimitivePtr kPrimLessEqual; | extern const PrimitivePtr kPrimLessEqual; | ||||
| extern const PrimitivePtr kPrimCumSum; | |||||
| // NN | // NN | ||||
| extern const PrimitivePtr kPrimFlatten; | extern const PrimitivePtr kPrimFlatten; | ||||
| @@ -40,6 +40,7 @@ ConstInputToAttrInfoRegistry::ConstInputToAttrInfoRegistry() { | |||||
| Register(prim::kPrimUnsortedSegmentSum->name(), {2}); | Register(prim::kPrimUnsortedSegmentSum->name(), {2}); | ||||
| Register(prim::kPrimOneHot->name(), {1}); | Register(prim::kPrimOneHot->name(), {1}); | ||||
| Register(prim::kPrimConcat->name(), {0}); | Register(prim::kPrimConcat->name(), {0}); | ||||
| Register(prim::kPrimCumSum->name(), {1}); | |||||
| Register(kUnsortedSegmentProdOpName, {2}); | Register(kUnsortedSegmentProdOpName, {2}); | ||||
| Register(kUnsortedSegmentMinOpName, {2}); | Register(kUnsortedSegmentMinOpName, {2}); | ||||
| Register(kSimpleMeanGradOpName, {1}); | Register(kSimpleMeanGradOpName, {1}); | ||||
| @@ -60,7 +61,6 @@ ConstInputToAttrInfoRegistry::ConstInputToAttrInfoRegistry() { | |||||
| Register(kResizeNearestNeighborV2OpName, {1}); | Register(kResizeNearestNeighborV2OpName, {1}); | ||||
| Register(kResizeNearestNeighborV2GradOpName, {1}); | Register(kResizeNearestNeighborV2GradOpName, {1}); | ||||
| Register(kApplyRMSPropOpname, {4, 5, 6}); | Register(kApplyRMSPropOpname, {4, 5, 6}); | ||||
| Register(kCumsumOpName, {1}); | |||||
| Register(kResizeBilinearV2OpName, {1}); | Register(kResizeBilinearV2OpName, {1}); | ||||
| Register(kReduceProdOpName, {1}); | Register(kReduceProdOpName, {1}); | ||||
| Register(kCumprodOpName, {1}); | Register(kCumprodOpName, {1}); | ||||
| @@ -191,3 +191,6 @@ from .prelu import _prelu_tbe | |||||
| from .prelu_grad import _prelu_grad_tbe | from .prelu_grad import _prelu_grad_tbe | ||||
| from .binary_cross_entropy import _binary_cross_entropy_tbe | from .binary_cross_entropy import _binary_cross_entropy_tbe | ||||
| from .binary_cross_entropy_grad import _binary_cross_entropy_grad_tbe | from .binary_cross_entropy_grad import _binary_cross_entropy_grad_tbe | ||||
| from .sin import _sin_tbe | |||||
| from .cos import _cos_tbe | |||||
| from .cum_sum import _cum_sum_tbe | |||||
| @@ -0,0 +1,37 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed 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. | |||||
| # ============================================================================ | |||||
| """Cos op""" | |||||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||||
| cos_op_info = TBERegOp("Cos") \ | |||||
| .fusion_type("ELEMWISE") \ | |||||
| .async_flag(False) \ | |||||
| .binfile_name("cos.so") \ | |||||
| .compute_cost(10) \ | |||||
| .kernel_name("cos") \ | |||||
| .partial_flag(True) \ | |||||
| .op_pattern("formatAgnostic") \ | |||||
| .input(0, "x", False, "required", "all") \ | |||||
| .output(0, "y", False, "required", "all") \ | |||||
| .dtype_format(DataType.F16_5HD, DataType.F16_5HD) \ | |||||
| .dtype_format(DataType.F32_5HD, DataType.F32_5HD) \ | |||||
| .get_op_info() | |||||
| @op_info_register(cos_op_info) | |||||
| def _cos_tbe(): | |||||
| """Cos TBE register""" | |||||
| return | |||||
| @@ -0,0 +1,42 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed 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. | |||||
| # ============================================================================ | |||||
| """CumSum op""" | |||||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||||
| cum_sum_op_info = TBERegOp("CumSum") \ | |||||
| .fusion_type("OPAQUE") \ | |||||
| .async_flag(False) \ | |||||
| .binfile_name("cumsum_d.so") \ | |||||
| .compute_cost(10) \ | |||||
| .kernel_name("cumsum_d") \ | |||||
| .partial_flag(True) \ | |||||
| .attr("axis", "optional", "int", "all", "0") \ | |||||
| .attr("exclusive", "optional", "bool", "true,false", "fales") \ | |||||
| .attr("reverse", "optional", "bool", "true,false", "false") \ | |||||
| .input(0, "x", False, "required", "all") \ | |||||
| .output(0, "y", False, "required", "all") \ | |||||
| .dtype_format(DataType.I32_Default, DataType.I32_Default) \ | |||||
| .dtype_format(DataType.F32_Default, DataType.F32_Default) \ | |||||
| .dtype_format(DataType.F16_Default, DataType.F16_Default) \ | |||||
| .dtype_format(DataType.I8_Default, DataType.I8_Default) \ | |||||
| .dtype_format(DataType.U8_Default, DataType.U8_Default) \ | |||||
| .get_op_info() | |||||
| @op_info_register(cum_sum_op_info) | |||||
| def _cum_sum_tbe(): | |||||
| """CumSum TBE register""" | |||||
| return | |||||
| @@ -0,0 +1,37 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed 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. | |||||
| # ============================================================================ | |||||
| """Sin op""" | |||||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||||
| sin_op_info = TBERegOp("Sin") \ | |||||
| .fusion_type("ELEMWISE") \ | |||||
| .async_flag(False) \ | |||||
| .binfile_name("sin.so") \ | |||||
| .compute_cost(10) \ | |||||
| .kernel_name("sin") \ | |||||
| .partial_flag(True) \ | |||||
| .op_pattern("formatAgnostic") \ | |||||
| .input(0, "x", False, "required", "all") \ | |||||
| .output(0, "y", False, "required", "all") \ | |||||
| .dtype_format(DataType.F16_5HD, DataType.F16_5HD) \ | |||||
| .dtype_format(DataType.F32_5HD, DataType.F32_5HD) \ | |||||
| .get_op_info() | |||||
| @op_info_register(sin_op_info) | |||||
| def _sin_tbe(): | |||||
| """Sin TBE register""" | |||||
| return | |||||
| @@ -504,10 +504,9 @@ test_case_math_ops = [ | |||||
| 'desc_inputs': [[4]], | 'desc_inputs': [[4]], | ||||
| 'desc_bprop': [[4]]}), | 'desc_bprop': [[4]]}), | ||||
| ('CumSum', { | ('CumSum', { | ||||
| 'block': P.CumSum(), | |||||
| 'desc_const': [0], | |||||
| 'desc_inputs': [Tensor(np.array([[3, 4], [1, 6]]).astype(np.float16))], | |||||
| 'desc_bprop': [Tensor(np.array([[3, 4], [4, 10]]).astype(np.float16))]}), | |||||
| 'block': CumSumNet(), | |||||
| 'desc_inputs': [Tensor(np.array([[3, 4, 6, 10], [1, 6, 7, 9], [4, 3, 8, 7], [1, 3, 7, 9]]).astype(np.float32))], | |||||
| 'desc_bprop': [Tensor(np.array([[3, 4, 6, 10], [1, 6, 7, 9], [4, 3, 8, 7], [1, 3, 7, 9]]).astype(np.float32))]}), | |||||
| ('ReduceSum_3', { | ('ReduceSum_3', { | ||||
| 'block': P.ReduceSum(), | 'block': P.ReduceSum(), | ||||
| 'desc_const': [0], | 'desc_const': [0], | ||||
| @@ -579,6 +578,10 @@ test_case_math_ops = [ | |||||
| 'desc_inputs': [Tensor(np.array([0, 1, 4, 5]).astype(np.float32)), | 'desc_inputs': [Tensor(np.array([0, 1, 4, 5]).astype(np.float32)), | ||||
| Tensor(np.array([1, 1, 3, 7]).astype(np.float32))], | Tensor(np.array([1, 1, 3, 7]).astype(np.float32))], | ||||
| 'skip': ['backward']}), | 'skip': ['backward']}), | ||||
| ('Cos', { | |||||
| 'block': P.Cos(), | |||||
| 'desc_inputs': [[2, 3]], | |||||
| 'desc_bprop': [[2, 3]]}), | |||||
| ] | ] | ||||
| test_case_nn_ops = [ | test_case_nn_ops = [ | ||||
| @@ -885,12 +888,6 @@ test_case_nn_ops = [ | |||||
| 'desc_inputs': [Tensor(np.array([[128, 32, 32, 64], [128, 32, 32, 64]]).astype(np.float16))], | 'desc_inputs': [Tensor(np.array([[128, 32, 32, 64], [128, 32, 32, 64]]).astype(np.float16))], | ||||
| 'desc_bprop': [Tensor(np.array([[128, 32, 32, 64], [128, 32, 32, 64]]).astype(np.float16))], | 'desc_bprop': [Tensor(np.array([[128, 32, 32, 64], [128, 32, 32, 64]]).astype(np.float16))], | ||||
| 'skip': ['backward']}), | 'skip': ['backward']}), | ||||
| ('CumSumNet', { | |||||
| 'block': CumSumNet(), | |||||
| 'desc_const': [0], | |||||
| 'desc_inputs': [Tensor(np.array([[3, 4, 6, 10], [1, 6, 7, 9], [4, 3, 8, 7], [1, 3, 7, 9]]).astype(np.float16))], | |||||
| 'desc_bprop': [ | |||||
| Tensor(np.array([[3, 4, 6, 10], [1, 6, 7, 9], [4, 3, 8, 7], [1, 3, 7, 9]]).astype(np.float16))]}), | |||||
| ('OneHot', { | ('OneHot', { | ||||
| 'block': P.OneHot(), | 'block': P.OneHot(), | ||||
| 'desc_const': [3, Tensor(1.0, mstype.float32), Tensor(0.0, mstype.float32)], | 'desc_const': [3, Tensor(1.0, mstype.float32), Tensor(0.0, mstype.float32)], | ||||