chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,348 @@
|
||||
/* Copyright (c) 2022 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/phi/common/scalar.h"
|
||||
#include "paddle/phi/core/dense_tensor.h"
|
||||
#include "paddle/phi/infermeta/unary.h"
|
||||
#include "paddle/utils/optional.h"
|
||||
|
||||
namespace phi {
|
||||
|
||||
#define DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(name) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& x, \
|
||||
const DenseTensor& dout, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_ONE_ATTRS_DEPX(name, attr) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& x, \
|
||||
const DenseTensor& dout, \
|
||||
float attr, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_ONE_DOUBLE_ATTRS_DEPX(name, attr) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& x, \
|
||||
const DenseTensor& dout, \
|
||||
double attr, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_TWO_ATTRS_DEPX(name, attr1, attr2) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& x, \
|
||||
const DenseTensor& dout, \
|
||||
float attr1, \
|
||||
float attr2, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_TWO_DOUBLE_ATTRS_DEPX(name, attr1, attr2) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& x, \
|
||||
const DenseTensor& dout, \
|
||||
double attr1, \
|
||||
double attr2, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(name) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& out, \
|
||||
const DenseTensor& dout, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACTIVATION_GRAD_KERNEL_NODEP(name) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel( \
|
||||
const Context& dev_ctx, const DenseTensor& dout, DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_ONE_ATTRS_DEPOUT(name, attr) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& out, \
|
||||
const DenseTensor& dout, \
|
||||
float attr, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_ONE_DOUBLE_ATTRS_DEPOUT(name, attr) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& out, \
|
||||
const DenseTensor& dout, \
|
||||
double attr, \
|
||||
DenseTensor* dx);
|
||||
|
||||
#define DECLARE_ACT_GRAD_KERNEL_WITH_TWO_ATTRS_DEPOUT(name, attr1, attr2) \
|
||||
template <typename T, typename Context> \
|
||||
void name##GradKernel(const Context& dev_ctx, \
|
||||
const DenseTensor& out, \
|
||||
const DenseTensor& dout, \
|
||||
float attr1, \
|
||||
float attr2, \
|
||||
DenseTensor* dx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SiluGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dout,
|
||||
DenseTensor* dx);
|
||||
template <typename T, typename Context>
|
||||
void ReluDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SinDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void CosDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void TanhDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dout_new,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void TanhTripleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
const optional<DenseTensor>& d_dout_new,
|
||||
const optional<DenseTensor>& d_ddout,
|
||||
DenseTensor* d_out_new,
|
||||
DenseTensor* d_dout,
|
||||
DenseTensor* d_ddx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SinTripleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const optional<DenseTensor>& dout,
|
||||
const optional<DenseTensor>& ddx,
|
||||
const DenseTensor& d_dx_new,
|
||||
const optional<DenseTensor>& d_ddout,
|
||||
DenseTensor* d_x_new,
|
||||
DenseTensor* d_dout,
|
||||
DenseTensor* d_ddx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void CosTripleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const optional<DenseTensor>& dout,
|
||||
const optional<DenseTensor>& ddx,
|
||||
const DenseTensor& d_dx_new,
|
||||
const optional<DenseTensor>& d_ddout,
|
||||
DenseTensor* d_x_new,
|
||||
DenseTensor* d_dout,
|
||||
DenseTensor* d_ddx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void LeakyReluDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& ddx,
|
||||
double alpha,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void EluGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dout,
|
||||
float alpha,
|
||||
DenseTensor* dx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void EluDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
float alpha,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SigmoidDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dout_new,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SigmoidTripleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
const DenseTensor& d_dout_new,
|
||||
const optional<DenseTensor>& d_ddout,
|
||||
DenseTensor* d_out_new,
|
||||
DenseTensor* d_dout,
|
||||
DenseTensor* d_ddx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void LogDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SqrtDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dx,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dout,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void RsqrtDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& out,
|
||||
const DenseTensor& dx,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dout,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void CeluDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
float alpha,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SquareDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void HardSwishGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
DenseTensor* dx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void PowGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const Scalar& factor,
|
||||
DenseTensor* dx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void PowDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
const Scalar& factor,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void PowTripleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
const DenseTensor& d_dx,
|
||||
const optional<DenseTensor>& d_ddout,
|
||||
const Scalar& factor,
|
||||
DenseTensor* out_d_x,
|
||||
DenseTensor* out_d_dout,
|
||||
DenseTensor* out_d_ddx);
|
||||
|
||||
template <typename T, typename Context>
|
||||
void SoftplusDoubleGradKernel(const Context& dev_ctx,
|
||||
const DenseTensor& x,
|
||||
const DenseTensor& dout,
|
||||
const DenseTensor& ddx,
|
||||
double beta,
|
||||
double threshold,
|
||||
DenseTensor* dx,
|
||||
DenseTensor* ddout);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Cos);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Tan);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Acos);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Sin);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Asin);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Atan);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Sinh);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Cosh);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Asinh);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Acosh);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Atanh);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(TanhShrink);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Square);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Softsign);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(LogSigmoid);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Log);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Log2);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Log10);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Log1p);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPX(Swish);
|
||||
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Exp);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Expm1);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Reciprocal);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Rsqrt);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Relu);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Tanh);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Sigmoid);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Sqrt);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_DEPOUT(Relu6);
|
||||
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_NODEP(Rint);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_NODEP(Round);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_NODEP(Floor);
|
||||
DECLARE_ACTIVATION_GRAD_KERNEL_NODEP(Ceil);
|
||||
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_DOUBLE_ATTRS_DEPX(LeakyRelu, alpha);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_ATTRS_DEPX(SoftShrink, lambda);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_ATTRS_DEPX(HardShrink, threshold);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_DOUBLE_ATTRS_DEPX(Logit, eps);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_ATTRS_DEPX(Mish, threshold);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_ATTRS_DEPX(Celu, alpha);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_ONE_DOUBLE_ATTRS_DEPOUT(LogitCUDA, eps);
|
||||
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_TWO_ATTRS_DEPX(HardTanh, t_min, t_max);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_TWO_ATTRS_DEPX(STanh, scale_a, scale_b);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_TWO_DOUBLE_ATTRS_DEPX(Softplus, beta, threshold);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_TWO_ATTRS_DEPOUT(HardSigmoid, slope, offset);
|
||||
DECLARE_ACT_GRAD_KERNEL_WITH_TWO_ATTRS_DEPX(ThresholdedRelu, threshold, value);
|
||||
|
||||
} // namespace phi
|
||||
Reference in New Issue
Block a user