From 5b5a56587ecc641f4a567b8b70779b817dc9d055 Mon Sep 17 00:00:00 2001 From: VectorSL Date: Tue, 21 Apr 2020 16:00:44 +0800 Subject: [PATCH] gpu add akg logical_and and logical_or --- mindspore/_akg/gpu/logical_and.py | 40 ++++++++++++++++++ mindspore/_akg/gpu/logical_or.py | 40 ++++++++++++++++++ mindspore/_akg/ops/math/logical_and.py | 41 +++++++++++++++++++ mindspore/_akg/ops/math/logical_or.py | 41 +++++++++++++++++++ mindspore/ops/_op_impl/akg/gpu/logical_and.py | 29 +++++++++++++ mindspore/ops/_op_impl/akg/gpu/logical_or.py | 29 +++++++++++++ 6 files changed, 220 insertions(+) create mode 100644 mindspore/_akg/gpu/logical_and.py create mode 100644 mindspore/_akg/gpu/logical_or.py create mode 100644 mindspore/_akg/ops/math/logical_and.py create mode 100644 mindspore/_akg/ops/math/logical_or.py create mode 100644 mindspore/ops/_op_impl/akg/gpu/logical_and.py create mode 100644 mindspore/ops/_op_impl/akg/gpu/logical_or.py diff --git a/mindspore/_akg/gpu/logical_and.py b/mindspore/_akg/gpu/logical_and.py new file mode 100644 index 000000000..645390145 --- /dev/null +++ b/mindspore/_akg/gpu/logical_and.py @@ -0,0 +1,40 @@ +# 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. +"""logical_and""" +import _akg.tvm +from _akg.ops.math import logical_and +from _akg.topi.generic import schedule_elemwise + +def LogicalAnd(x, y): + """LogicalAnd.""" + return logical_and.logical_and(x, y) + + +def gpu_schedule_LogicalAnd(outs): + """ + GPU schedule for LogicalAnd. + + Args: + outs (tvm.tensor.Tensor): outputs of compute. + + Returns: + sch (schedule.Schedule): The created schedule. + """ + device = 'cuda' + ctx = _akg.tvm.context(device, 0) + if not ctx.exist: + raise SystemError("Skip because %s is not enabled" % device) + with _akg.tvm.target.create(device): + sch = schedule_elemwise(outs) + return sch diff --git a/mindspore/_akg/gpu/logical_or.py b/mindspore/_akg/gpu/logical_or.py new file mode 100644 index 000000000..1bd49bedb --- /dev/null +++ b/mindspore/_akg/gpu/logical_or.py @@ -0,0 +1,40 @@ +# 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. +"""logical_or""" +import _akg.tvm +from _akg.ops.math import logical_or +from _akg.topi.generic import schedule_elemwise + +def LogicalOr(x, y): + """LogicalOr.""" + return logical_or.logical_or(x, y) + + +def gpu_schedule_LogicalOr(outs): + """ + GPU schedule for LogicalOr. + + Args: + outs (tvm.tensor.Tensor): outputs of compute. + + Returns: + sch (schedule.Schedule): The created schedule. + """ + device = 'cuda' + ctx = _akg.tvm.context(device, 0) + if not ctx.exist: + raise SystemError("Skip because %s is not enabled" % device) + with _akg.tvm.target.create(device): + sch = schedule_elemwise(outs) + return sch diff --git a/mindspore/_akg/ops/math/logical_and.py b/mindspore/_akg/ops/math/logical_and.py new file mode 100644 index 000000000..480d4e174 --- /dev/null +++ b/mindspore/_akg/ops/math/logical_and.py @@ -0,0 +1,41 @@ +# 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. + +"""operator dsl function: logical_and""" +import _akg.tvm +import _akg.topi +from _akg.utils import validation_check as vc_util + +@vc_util.check_input_type(_akg.tvm.tensor.Tensor, _akg.tvm.tensor.Tensor) +def logical_and(input1, input2): + """ + Compute logical_and of input1 and input2. + + Args: + input1 (tvm.tensor.Tensor): Tensor. + input2 (tvm.tensor.Tensor): Tensor. + + Returns: + tvm.tensor.Tensor. LogicalAnd of input1 and input2. + """ + + vc_util.elemwise_dtype_check(input1.dtype, input2.dtype) + + shape1 = [x.value for x in input1.shape] + shape2 = [x.value for x in input2.shape] + vc_util.check_shape(shape1) + vc_util.check_shape(shape2) + + res = _akg.topi.logical_and(input1, input2) + return res diff --git a/mindspore/_akg/ops/math/logical_or.py b/mindspore/_akg/ops/math/logical_or.py new file mode 100644 index 000000000..8fb0b8056 --- /dev/null +++ b/mindspore/_akg/ops/math/logical_or.py @@ -0,0 +1,41 @@ +# 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. + +"""operator dsl function: logical_or""" +import _akg.tvm +import _akg.topi +from _akg.utils import validation_check as vc_util + +@vc_util.check_input_type(_akg.tvm.tensor.Tensor, _akg.tvm.tensor.Tensor) +def logical_or(input1, input2): + """ + Compute logical_or of input1 and input2. + + Args: + input1 (tvm.tensor.Tensor): Tensor. + input2 (tvm.tensor.Tensor): Tensor. + + Returns: + tvm.tensor.Tensor. LogicalOr of input1 and input2. + """ + + vc_util.elemwise_dtype_check(input1.dtype, input2.dtype) + + shape1 = [x.value for x in input1.shape] + shape2 = [x.value for x in input2.shape] + vc_util.check_shape(shape1) + vc_util.check_shape(shape2) + + res = _akg.topi.logical_or(input1, input2) + return res diff --git a/mindspore/ops/_op_impl/akg/gpu/logical_and.py b/mindspore/ops/_op_impl/akg/gpu/logical_and.py new file mode 100644 index 000000000..da5b69651 --- /dev/null +++ b/mindspore/ops/_op_impl/akg/gpu/logical_and.py @@ -0,0 +1,29 @@ +# 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. + +"""LogicalAnd op""" +from mindspore.ops.op_info_register import op_info_register, AkgRegOp, DataType + +logicaland_op_info = AkgRegOp("LogicalAnd") \ + .fusion_type("OPAQUE") \ + .input(0, "x") \ + .input(1, "y") \ + .output(0, "output") \ + .dtype_format(DataType.BOOL_Default, DataType.BOOL_Default, DataType.BOOL_Default) \ + .get_op_info() + +@op_info_register(logicaland_op_info) +def _logical_and_akg(): + """LogicalAnd register""" + return diff --git a/mindspore/ops/_op_impl/akg/gpu/logical_or.py b/mindspore/ops/_op_impl/akg/gpu/logical_or.py new file mode 100644 index 000000000..3a642511c --- /dev/null +++ b/mindspore/ops/_op_impl/akg/gpu/logical_or.py @@ -0,0 +1,29 @@ +# 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. + +"""LogicalOr op""" +from mindspore.ops.op_info_register import op_info_register, AkgRegOp, DataType + +logicalor_op_info = AkgRegOp("LogicalOr") \ + .fusion_type("OPAQUE") \ + .input(0, "x") \ + .input(1, "y") \ + .output(0, "output") \ + .dtype_format(DataType.BOOL_Default, DataType.BOOL_Default, DataType.BOOL_Default) \ + .get_op_info() + +@op_info_register(logicalor_op_info) +def _logical_or_akg(): + """LogicalOr register""" + return -- GitLab