【tensorrt】——error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’

tensorrt

给tensorrt写插件的时候,报错:

interpolate.cpp:63:93: error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’

因为还有父类的虚函数没有实现。

可以通过一个简单的类实现进行测试,所有的函数不需要实现,这样看有哪些虚函数。比如:

class InterpolatePlugin : public IPluginV2 
{
public:
    InterpolatePlugin(std::vector<int64_t> size, std::string mode, bool align_corners) {};
      
    InterpolatePlugin(const char *data, size_t length){};
      
    // create from serialized data
    InterpolatePlugin(const std::string &data) {  };

    int getNbOutputs() const override {};

    Dims getOutputDimensions(int index, const Dims* inputs, int nbInputDims) override{    };

    int initialize() override{};

    void terminate() override{};

    size_t getWorkspaceSize(int maxBatchSize) const override{};

    int enqueue(
        int batchSize, const void* const* inputs, void** outputs, void* workspace, cudaStream_t stream) override{        };

    size_t getSerializationSize() const override{};

    void serialize(void* buffer) const override{};

    void configureWithFormat(const Dims* inputDims, int nbInputs, const Dims* outputDims, int nbOutputs, DataType type,
        PluginFormat format, int maxBatchSize) override{};

    bool supportsFormat(DataType type, PluginFormat format) const override{};

    const char* getPluginType() const override{};

    const char* getPluginVersion() const override{};

    void destroy() override{};

    IPluginV2* clone() const override{};

    void setPluginNamespace(const char* libNamespace) override{}

    const char* getPluginNamespace() const override{}

private:
    // float mNegSlope;
    // int mBatchDim;
      // configured by user
    std::vector<int64_t> size;
    std::string mode;
    bool align_corners;
};

上面是IPluginV2, 下面是IPluginV2DynamicExt类的最简单,包含了所有虚函数。


class InterpolatePlugin : public IPluginV2DynamicExt
{
public:
    InterpolatePlugin(std::vector<int64_t> size, std::string mode, bool align_corners) {};
      
    InterpolatePlugin(const char *data, size_t length){};
      
    // create from serialized data
    InterpolatePlugin(const std::string &data) {  };

    // ~InterpolatePlugin() override = default;

    // IPluginV2 methods
    const char* getPluginType() const override{};
    const char* getPluginVersion() const override{};
    int getNbOutputs() const override{};
    int initialize() override{};
    void terminate() override{};
    size_t getSerializationSize() const override{};
    void serialize(void* buffer) const override{};
    void destroy() override{};
    void setPluginNamespace(const char* libNamespace) override{};
    const char* getPluginNamespace() const override{};
    // void setClipParam(bool clip){};

    // IPluginV2Ext methods
    nvinfer1::DataType getOutputDataType(int index, const nvinfer1::DataType* inputType, int nbInputs) const override{};

    // IPluginV2DynamicExt methods
    IPluginV2DynamicExt* clone() const override{
      return new InterpolatePlugin(size, mode, align_corners);
    };
    DimsExprs getOutputDimensions(
        int outputIndex, const DimsExprs* inputs, int nbInputs, IExprBuilder& exprBuilder) override{};
    bool supportsFormatCombination(int pos, const PluginTensorDesc* inOut, int nbInputs, int nbOutputs) override{};
    void configurePlugin(
        const DynamicPluginTensorDesc* in, int nbInputs, const DynamicPluginTensorDesc* out, int nbOutputs) override{};
    size_t getWorkspaceSize(
        const PluginTensorDesc* inputs, int nbInputs, const PluginTensorDesc* outputs, int nbOutputs) const override{};
    int enqueue(const PluginTensorDesc* inputDesc, const PluginTensorDesc* outputDesc, const void* const* inputs,
        void* const* outputs, void* workspace, cudaStream_t stream) override{};

private:
    std::vector<int64_t> size;
    std::string mode;
    bool align_corners;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值