---
title: aclnn_gelu_operation.h
description: "```"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_0059.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_0059.html
indexId: 82c108d90c8d74f2102f75c0de448c57c694c06deec680b397a8462e20386f6361
---
# aclnn_gelu_operation.h

```
#ifndef ACLNN_GELU_OPERATION_H
#define ACLNN_GELU_OPERATION_H

#include "aclnn/aclnn_operation_base.h"

struct AclnnGeluParam
{
    int64_t geluApproximate = -1; // gelu_v2计算的入参，指定高斯近似算法，0: "none", 1: "tanh" , -1: 不使用gelu_v2
};

class GeluOperation : public AclnnBaseOperation
{
public:
    GeluOperation(const std::string &name, AclnnGeluParam param);
    atb::Status InferShape(
        const atb::SVector<atb::TensorDesc> &inTensorDesc, atb::SVector<atb::TensorDesc> &outTensorDesc) const override;
    uint32_t GetInputNum() const override;
    uint32_t GetOutputNum() const override;

    atb::Status CreateAclnnVariantPack(const atb::VariantPack &variantPack) override;
    atb::Status SetAclnnWorkspaceExecutor() override;
    atb::Status ExecuteAclnnOp(uint8_t *workspace, aclrtStream &stream) override;

private:
    atb::Status CreateAclnnInTensor(const atb::VariantPack &variantPack);
    atb::Status CreateAclnnOutTensor(const atb::VariantPack &variantPack);
    std::shared_ptr<AclnnTensor> CreateAclnnTensor(atb::Tensor atbTensor, size_t tensorIdx);

    AclnnGeluParam param_;
};

#endif
```
