From 7f4abaf2f555ed9df515b2e521e72df5f4dbd52a Mon Sep 17 00:00:00 2001 From: SunAhong1993 <48579383+SunAhong1993@users.noreply.github.com> Date: Fri, 3 Jan 2020 21:11:24 +0800 Subject: [PATCH] register int/int64_t/float16 in pow/square kernel,test=develop (#22023) * register int/int64_t/float16 in pow/square kernel,test=develop * add abs/square/exp type,test=develop --- paddle/fluid/operators/activation_op.cc | 98 +++++++++++++++++++++++-- paddle/fluid/operators/activation_op.cu | 75 ++++++++++++++++++- paddle/fluid/operators/activation_op.h | 2 - 3 files changed, 165 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/operators/activation_op.cc b/paddle/fluid/operators/activation_op.cc index bca19e5cd9a..9978fc3c41b 100644 --- a/paddle/fluid/operators/activation_op.cc +++ b/paddle/fluid/operators/activation_op.cc @@ -1029,8 +1029,24 @@ REGISTER_OPERATOR( ops::ActivationOpDoubleGrad::FwdDeps()>, ops::ActivationDoubleGradOpInplaceInference); -REGISTER_ACTIVATION_CPU_KERNEL(square, Square, SquareFunctor, - SquareGradFunctor); +REGISTER_OP_CPU_KERNEL(square, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>); +REGISTER_OP_CPU_KERNEL( + square_grad, ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>); REGISTER_OP_CPU_KERNEL( square_grad_grad, @@ -1039,7 +1055,11 @@ REGISTER_OP_CPU_KERNEL( ops::SquareDoubleGradKernel>, ops::SquareDoubleGradKernel>); + ops::SquareGradGradFunctor>, + ops::SquareDoubleGradKernel>, + ops::SquareDoubleGradKernel>); /* ========================================================================== */ /* ========================== pow register ============================ */ @@ -1055,9 +1075,77 @@ REGISTER_OPERATOR(pow_grad, ops::PowOpGrad, REGISTER_OP_CPU_KERNEL( pow, ops::PowKernel>, - ops::PowKernel>); + ops::PowKernel>, + ops::PowKernel>, + ops::PowKernel>); REGISTER_OP_CPU_KERNEL( pow_grad, ops::PowGradKernel>, - ops::PowGradKernel>); + ops::PowGradKernel>, + ops::PowGradKernel>, + ops::PowGradKernel>); +/* ========================================================================== */ + +/* ========================== exp register ============================ */ +REGISTER_OPERATOR( + exp, ops::ActivationOp, ops::ExpOpMaker, ops::ActivationOpInferVarType, + ops::ActivationGradOpMaker::FwdDeps(), + paddle::framework::OpDesc>, + ops::ActivationGradOpMaker::FwdDeps(), + paddle::imperative::OpBase>, + std::conditional>(), + ops::ActFwdInplaceInferer, void>::type); +REGISTER_OPERATOR(exp_grad, ops::ActivationOpGrad, + ops::ActivationGradOpInplaceInference); + +REGISTER_OP_CPU_KERNEL(exp, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>); +REGISTER_OP_CPU_KERNEL( + exp_grad, ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>); +/* ========================================================================== */ + +/* ========================== abs register ============================ */ +REGISTER_OPERATOR( + abs, ops::ActivationOp, ops::AbsOpMaker, ops::ActivationOpInferVarType, + ops::ActivationGradOpMaker::FwdDeps(), + paddle::framework::OpDesc>, + ops::ActivationGradOpMaker::FwdDeps(), + paddle::imperative::OpBase>, + std::conditional>(), + ops::ActFwdInplaceInferer, void>::type); +REGISTER_OPERATOR(abs_grad, ops::ActivationOpGrad, + ops::ActivationGradOpInplaceInference); + +REGISTER_OP_CPU_KERNEL(abs, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>); +REGISTER_OP_CPU_KERNEL( + abs_grad, ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>); /* ========================================================================== */ diff --git a/paddle/fluid/operators/activation_op.cu b/paddle/fluid/operators/activation_op.cu index ac03b8983b4..863e960c6a8 100644 --- a/paddle/fluid/operators/activation_op.cu +++ b/paddle/fluid/operators/activation_op.cu @@ -74,8 +74,25 @@ REGISTER_OP_CUDA_KERNEL( /* ========================================================================== */ /* =========================== square register ============================ */ -REGISTER_ACTIVATION_CUDA_KERNEL(square, Square, SquareFunctor, - SquareGradFunctor); +REGISTER_OP_CUDA_KERNEL( + square, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>); +REGISTER_OP_CUDA_KERNEL( + square_grad, ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>); REGISTER_OP_CUDA_KERNEL( square_grad_grad, @@ -84,7 +101,11 @@ REGISTER_OP_CUDA_KERNEL( ops::SquareDoubleGradKernel>, ops::SquareDoubleGradKernel>); + ops::SquareGradGradFunctor>, + ops::SquareDoubleGradKernel>, + ops::SquareDoubleGradKernel>); /* ========================================================================== */ /* ========================== pow register ============================ */ @@ -92,11 +113,59 @@ REGISTER_OP_CUDA_KERNEL( REGISTER_OP_CUDA_KERNEL( pow, ops::PowKernel>, ops::PowKernel>, + ops::PowKernel>, + ops::PowKernel>, ops::PowKernel>); REGISTER_OP_CUDA_KERNEL( pow_grad, ops::PowGradKernel>, ops::PowGradKernel>, + ops::PowGradKernel>, + ops::PowGradKernel>, ops::PowGradKernel>); /* ========================================================================== */ + +/* ========================== exp register ============================ */ + +REGISTER_OP_CUDA_KERNEL( + exp, ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>); +REGISTER_OP_CUDA_KERNEL( + exp_grad, ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>); +/* ========================================================================== */ + +/* ========================== exp register ============================ */ + +REGISTER_OP_CUDA_KERNEL( + abs, ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>, + ops::ActivationKernel>); +REGISTER_OP_CUDA_KERNEL( + abs_grad, ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>, + ops::ActivationGradKernel>); +/* ========================================================================== */ diff --git a/paddle/fluid/operators/activation_op.h b/paddle/fluid/operators/activation_op.h index 339e9dedeac..bc01943060d 100644 --- a/paddle/fluid/operators/activation_op.h +++ b/paddle/fluid/operators/activation_op.h @@ -1667,13 +1667,11 @@ class PowGradKernel #define FOR_EACH_ACTIVATION_OP(__macro) \ __macro(sigmoid, Sigmoid, SigmoidFunctor, SigmoidGradFunctor); \ __macro(logsigmoid, LogSigmoid, LogSigmoidFunctor, LogSigmoidGradFunctor); \ - __macro(exp, Exp, ExpFunctor, ExpGradFunctor); \ __macro(gelu, Gelu, GeluFunctor, GeluGradFunctor); \ __macro(tanh, Tanh, TanhFunctor, TanhGradFunctor); \ __macro(atan, Atan, AtanFunctor, AtanGradFunctor); \ __macro(softshrink, SoftShrink, SoftShrinkFunctor, SoftShrinkGradFunctor); \ __macro(rsqrt, Rsqrt, RsqrtFunctor, RsqrtGradFunctor); \ - __macro(abs, Abs, AbsFunctor, AbsGradFunctor); \ __macro(ceil, Ceil, CeilFunctor, ZeroGradFunctor); \ __macro(floor, Floor, FloorFunctor, ZeroGradFunctor); \ __macro(cos, Cos, CosFunctor, CosGradFunctor); \ -- GitLab