From 0f8ea40670bba3302099ceaafa6825d85a6183de Mon Sep 17 00:00:00 2001 From: PaddlePaddle-Gardener Date: Thu, 13 Jan 2022 14:26:26 +0800 Subject: [PATCH] mirgate_38863 --- paddle/fluid/operators/math/math_function.cc | 22 ++++++++ paddle/fluid/operators/math/math_function.cu | 13 ++++- paddle/pten/kernels/CMakeLists.txt | 4 +- paddle/pten/kernels/cpu/elementwise.h | 2 +- paddle/pten/kernels/cpu/reduce.h | 4 +- .../kernels/{hybird => funcs}/CMakeLists.txt | 0 .../kernels/{hybird => funcs}/transpose.cc | 0 .../kernels/{hybird => funcs}/transpose.cu | 0 .../kernels/{hybird => funcs}/transpose.h | 0 paddle/pten/kernels/gpu/dot_kernel.cu | 2 +- .../pten/kernels/hybird/eigen/CMakeLists.txt | 0 paddle/pten/kernels/hybird/eigen/sign.h | 0 .../kernels/hybird/general/CMakeLists.txt | 0 .../pten/kernels/impl/dot_grad_kernel_impl.h | 2 +- paddle/pten/kernels/impl/full_kernel_impl.h | 2 +- paddle/pten/kernels/impl/scale_kernel_impl.h | 50 +++++++++++++++++++ paddle/pten/kernels/impl/sign_kernel_impl.h | 2 +- 17 files changed, 92 insertions(+), 11 deletions(-) rename paddle/pten/kernels/{hybird => funcs}/CMakeLists.txt (100%) rename paddle/pten/kernels/{hybird => funcs}/transpose.cc (100%) rename paddle/pten/kernels/{hybird => funcs}/transpose.cu (100%) rename paddle/pten/kernels/{hybird => funcs}/transpose.h (100%) delete mode 100644 paddle/pten/kernels/hybird/eigen/CMakeLists.txt delete mode 100644 paddle/pten/kernels/hybird/eigen/sign.h delete mode 100644 paddle/pten/kernels/hybird/general/CMakeLists.txt create mode 100644 paddle/pten/kernels/impl/scale_kernel_impl.h diff --git a/paddle/fluid/operators/math/math_function.cc b/paddle/fluid/operators/math/math_function.cc index 9bd8339196..ec21524b0b 100644 --- a/paddle/fluid/operators/math/math_function.cc +++ b/paddle/fluid/operators/math/math_function.cc @@ -29,6 +29,7 @@ limitations under the License. */ #include "paddle/fluid/operators/math/math_function_impl.h" #include "paddle/fluid/platform/bfloat16.h" #include "paddle/fluid/platform/float16.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" #include "unsupported/Eigen/CXX11/Tensor" namespace paddle { @@ -172,6 +173,13 @@ void set_constant_with_place( platform::errors::Unimplemented("NPUPinnedPlace is not supported")); } +template <> +void set_constant_with_place( + const platform::DeviceContext& context, framework::Tensor* tensor, + float value) { + PADDLE_THROW(platform::errors::Unimplemented("IPUPlace is not supported")); +} + template <> void set_constant_with_place( const platform::DeviceContext& context, framework::Tensor* tensor, @@ -179,6 +187,13 @@ void set_constant_with_place( framework::VisitDataType(tensor->type(), TensorSetConstantCPU(tensor, value)); } +template <> +void set_constant_with_place( + const platform::DeviceContext& context, framework::Tensor* tensor, + float value) { + PADDLE_THROW(platform::errors::Unimplemented("MLUPlace is not supported")); +} + template <> void set_constant_with_place( const platform::DeviceContext& context, framework::Tensor* tensor, @@ -268,6 +283,13 @@ struct ElementwiseAddTo { auto& place = *(ctx->eigen_device()); out.device(place) = out + in; } + void operator()(platform::CPUDeviceContext* ctx, const pten::DenseTensor& src, + pten::DenseTensor* dst) { + auto in = pten::EigenVector::Flatten(src); + auto out = pten::EigenVector::Flatten(*dst); + auto& place = *(ctx->eigen_device()); + out.device(place) = out + in; + } }; template struct ElementwiseAddTo; diff --git a/paddle/fluid/operators/math/math_function.cu b/paddle/fluid/operators/math/math_function.cu index cfdfa456e3..378f0426dd 100644 --- a/paddle/fluid/operators/math/math_function.cu +++ b/paddle/fluid/operators/math/math_function.cu @@ -21,6 +21,7 @@ limitations under the License. */ #include "paddle/fluid/operators/math/math_function_impl.h" #include "paddle/fluid/platform/bfloat16.h" #include "paddle/fluid/platform/float16.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" namespace paddle { namespace operators { @@ -101,8 +102,8 @@ struct TransposeNormal { BOOST_GET_CONST(platform::CUDAPlace, context.GetPlace()); platform::CPUPlace cpu_place = platform::CPUPlace(); size_t size = 3 * rank * sizeof(int64_t); - auto cpu_buf_holder = memory::AllocShared(cpu_place, size); - auto cuda_buf_holder = memory::AllocShared(cuda_place, size); + auto cpu_buf_holder = memory::Alloc(cpu_place, size); + auto cuda_buf_holder = memory::Alloc(cuda_place, size); REINTERPRET(int64_t, cpu_buf, cpu_buf_holder->ptr()); REINTERPRET(int64_t, cuda_buf, cuda_buf_holder->ptr()); for (int i = 0; i < rank; ++i) { @@ -283,10 +284,18 @@ struct ElementwiseAddTo { auto& place = *(ctx->eigen_device()); out.device(place) = out + in; } + void operator()(platform::CUDADeviceContext* ctx, + const pten::DenseTensor& src, pten::DenseTensor* dst) { + auto in = pten::EigenVector::Flatten(src); + auto out = pten::EigenVector::Flatten(*dst); + auto& place = *(ctx->eigen_device()); + out.device(place) = out + in; + } }; template struct ElementwiseAddTo; + } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/pten/kernels/CMakeLists.txt b/paddle/pten/kernels/CMakeLists.txt index fc04cd797f..45724e5d22 100644 --- a/paddle/pten/kernels/CMakeLists.txt +++ b/paddle/pten/kernels/CMakeLists.txt @@ -6,8 +6,8 @@ file(WRITE ${kernel_declare_file} "// Generated by the paddle/pten/kernels/CMake # kernel primitive api add_subdirectory(primitive) -# pten hybird functors and functions called by kernels -add_subdirectory(hybird) +# pten functors and functions called by kernels +add_subdirectory(funcs) add_subdirectory(cpu) if(WITH_GPU OR WITH_ROCM) diff --git a/paddle/pten/kernels/cpu/elementwise.h b/paddle/pten/kernels/cpu/elementwise.h index 5a421de117..97db997a16 100644 --- a/paddle/pten/kernels/cpu/elementwise.h +++ b/paddle/pten/kernels/cpu/elementwise.h @@ -19,7 +19,7 @@ limitations under the License. */ #include "paddle/pten/kernels/funcs/elementwise_base.h" #include "paddle/fluid/operators/math/blas.h" -#include "paddle/pten/kernels/hybird/eigen/common.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" namespace pten { diff --git a/paddle/pten/kernels/cpu/reduce.h b/paddle/pten/kernels/cpu/reduce.h index fa603b2163..1e9c1e885f 100644 --- a/paddle/pten/kernels/cpu/reduce.h +++ b/paddle/pten/kernels/cpu/reduce.h @@ -22,8 +22,8 @@ #include "paddle/pten/api/lib/utils/storage.h" #include "paddle/pten/core/dense_tensor.h" -#include "paddle/pten/kernels/hybird/eigen/common.h" -#include "paddle/pten/kernels/hybird/transpose.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" +#include "paddle/pten/kernels/funcs/transpose.h" // See Note [ Why still include the fluid headers? ] #include "paddle/fluid/operators/eigen/eigen_function.h" namespace pten { diff --git a/paddle/pten/kernels/hybird/CMakeLists.txt b/paddle/pten/kernels/funcs/CMakeLists.txt similarity index 100% rename from paddle/pten/kernels/hybird/CMakeLists.txt rename to paddle/pten/kernels/funcs/CMakeLists.txt diff --git a/paddle/pten/kernels/hybird/transpose.cc b/paddle/pten/kernels/funcs/transpose.cc similarity index 100% rename from paddle/pten/kernels/hybird/transpose.cc rename to paddle/pten/kernels/funcs/transpose.cc diff --git a/paddle/pten/kernels/hybird/transpose.cu b/paddle/pten/kernels/funcs/transpose.cu similarity index 100% rename from paddle/pten/kernels/hybird/transpose.cu rename to paddle/pten/kernels/funcs/transpose.cu diff --git a/paddle/pten/kernels/hybird/transpose.h b/paddle/pten/kernels/funcs/transpose.h similarity index 100% rename from paddle/pten/kernels/hybird/transpose.h rename to paddle/pten/kernels/funcs/transpose.h diff --git a/paddle/pten/kernels/gpu/dot_kernel.cu b/paddle/pten/kernels/gpu/dot_kernel.cu index 1f9e7aa3f1..08d8f83c40 100644 --- a/paddle/pten/kernels/gpu/dot_kernel.cu +++ b/paddle/pten/kernels/gpu/dot_kernel.cu @@ -16,7 +16,7 @@ #include "paddle/pten/backends/gpu/gpu_context.h" #include "paddle/pten/core/kernel_registry.h" -#include "paddle/pten/kernels/hybird/eigen/common.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" // See Note [ Why still include the fluid headers? ] #include "paddle/fluid/operators/eigen/eigen_function.h" diff --git a/paddle/pten/kernels/hybird/eigen/CMakeLists.txt b/paddle/pten/kernels/hybird/eigen/CMakeLists.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/paddle/pten/kernels/hybird/eigen/sign.h b/paddle/pten/kernels/hybird/eigen/sign.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/paddle/pten/kernels/hybird/general/CMakeLists.txt b/paddle/pten/kernels/hybird/general/CMakeLists.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/paddle/pten/kernels/impl/dot_grad_kernel_impl.h b/paddle/pten/kernels/impl/dot_grad_kernel_impl.h index 16c87bbab4..39cdbad514 100644 --- a/paddle/pten/kernels/impl/dot_grad_kernel_impl.h +++ b/paddle/pten/kernels/impl/dot_grad_kernel_impl.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "paddle/pten/core/dense_tensor.h" -#include "paddle/pten/kernels/hybird/eigen/common.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" #include "paddle/pten/kernels/complex_kernel.h" diff --git a/paddle/pten/kernels/impl/full_kernel_impl.h b/paddle/pten/kernels/impl/full_kernel_impl.h index 9be40e22a0..79ca63c9b0 100644 --- a/paddle/pten/kernels/impl/full_kernel_impl.h +++ b/paddle/pten/kernels/impl/full_kernel_impl.h @@ -17,7 +17,7 @@ limitations under the License. */ #include "paddle/pten/common/scalar.h" #include "paddle/pten/common/scalar_array.h" #include "paddle/pten/core/dense_tensor.h" -#include "paddle/pten/kernels/hybird/eigen/common.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" // See Note [ Why still include the fluid headers? ] #include "paddle/fluid/operators/eigen/eigen_function.h" diff --git a/paddle/pten/kernels/impl/scale_kernel_impl.h b/paddle/pten/kernels/impl/scale_kernel_impl.h new file mode 100644 index 0000000000..2e0b158b36 --- /dev/null +++ b/paddle/pten/kernels/impl/scale_kernel_impl.h @@ -0,0 +1,50 @@ +/* Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. + +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. */ + +#pragma once + +#include "paddle/pten/common/scalar.h" +#include "paddle/pten/core/dense_tensor.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" + +// See Note [ Why still include the fluid headers? ] +#include "paddle/fluid/operators/eigen/eigen_function.h" + +namespace pten { + +template +void Scale(const Context& dev_ctx, + const DenseTensor& x, + const Scalar& scale, + float bias, + bool bias_after_scale, + DenseTensor* out) { + // calc + out->mutable_data(); + auto eigen_out = pten::EigenVector::Flatten(*out); + auto eigen_x = pten::EigenVector::Flatten(x); + auto& dev = *dev_ctx.eigen_device(); + // TODO(chenweihang): now the eigen function here need the dtype of scale, + // eigen_x, bias should be same, so here need cast for two scalar arg, + // maybe we declare that the type of scale and bias is T? + paddle::operators::EigenScale, T>::Eval( + dev, + eigen_out, + eigen_x, + scale.to(), + static_cast(bias), + bias_after_scale); +} + +} // namespace pten diff --git a/paddle/pten/kernels/impl/sign_kernel_impl.h b/paddle/pten/kernels/impl/sign_kernel_impl.h index 306206f1fc..655cda762e 100644 --- a/paddle/pten/kernels/impl/sign_kernel_impl.h +++ b/paddle/pten/kernels/impl/sign_kernel_impl.h @@ -15,7 +15,7 @@ limitations under the License. */ #pragma once #include "paddle/pten/core/dense_tensor.h" -#include "paddle/pten/kernels/hybird/eigen/common.h" +#include "paddle/pten/kernels/funcs/eigen/common.h" // See Note [ Why still include the fluid headers? ] #include "paddle/fluid/operators/eigen/eigen_function.h" -- Gitee