21#include <NvInferVersion.h>
29#ifdef NV_TENSORRT_MAJOR
30#if NV_TENSORRT_MAJOR != 8
31class ReLUPlugin :
public nvinfer1::IPlugin {
33 ReLUPlugin(
const ReLUParameter ¶m,
const nvinfer1::Dims &in_dims) {
34 input_dims_.nbDims = in_dims.nbDims;
35 CHECK_GT(input_dims_.nbDims, 0);
36 for (
int i = 0; i < in_dims.nbDims; i++) {
37 input_dims_.d[i] = in_dims.d[i];
38 input_dims_.type[i] = in_dims.type[i];
40 negative_slope_ = param.negative_slope();
45 virtual int initialize() {
return 0; }
46 virtual void terminate() {}
47 int getNbOutputs()
const override {
return 1; }
49 nvinfer1::Dims getOutputDimensions(
int index,
const nvinfer1::Dims *inputs,
50 int nbInputDims)
override {
51 nvinfer1::Dims out_dims = inputs[0];
55 void configure(
const nvinfer1::Dims *inputDims,
int nbInputs,
56 const nvinfer1::Dims *outputDims,
int nbOutputs,
57 int maxBatchSize)
override {
58 input_dims_ = inputDims[0];
61 size_t getWorkspaceSize(
int maxBatchSize)
const override {
return 0; }
63 virtual int enqueue(
int batchSize,
const void *
const *inputs,
void **outputs,
64 void *workspace, cudaStream_t stream);
66 size_t getSerializationSize()
override {
return 0; }
68 void serialize(
void *buffer)
override {
69 char *d =
reinterpret_cast<char *
>(buffer), *a = d;
70 size_t size = getSerializationSize();
71 CHECK_EQ(d, a + size);
75 float negative_slope_;
76 nvinfer1::Dims input_dims_;
80class ReLUPlugin :
public nvinfer1::IPluginV2Ext {
82 ReLUPlugin(
const ReLUParameter ¶m,
const nvinfer1::Dims &in_dims) {
83 input_dims_.nbDims = in_dims.nbDims;
84 CHECK_GT(input_dims_.nbDims, 0);
85 for (
int i = 0; i < in_dims.nbDims; i++) {
86 input_dims_.d[i] = in_dims.d[i];
88 negative_slope_ = param.negative_slope();
93 virtual int initialize() noexcept {
return 0; }
94 virtual void terminate() noexcept {}
95 int32_t getNbOutputs() const noexcept
override {
return 1; }
97 nvinfer1::Dims getOutputDimensions(int32_t index,
98 const nvinfer1::Dims *inputs,
99 int32_t nbInputDims)
noexcept override {
100 nvinfer1::Dims out_dims = inputs[0];
104 void configureWithFormat(
const nvinfer1::Dims *inputDims, int32_t nbInputs,
105 const nvinfer1::Dims *outputDims, int32_t nbOutputs,
106 nvinfer1::DataType type, nvinfer1::PluginFormat format,
107 int32_t maxBatchSize)
noexcept override {
108 input_dims_ = inputDims[0];
111 size_t getWorkspaceSize(int32_t maxBatchSize)
112 const noexcept override {
return 0; }
114 int32_t enqueue(int32_t batchSize,
const void *
const *inputs,
115 void *
const *outputs,
void *workspace,
119 size_t getSerializationSize() const noexcept
override {
return 0; }
121 void serialize(
void *buffer)
const noexcept override {
122 char *d =
reinterpret_cast<char *
>(buffer), *a = d;
123 size_t size = getSerializationSize();
124 CHECK_EQ(d, a + size);
127 nvinfer1::AsciiChar
const* getPluginType()
128 const noexcept
override {
132 nvinfer1::AsciiChar
const* getPluginVersion()
133 const noexcept
override {
134 return plugin_version;
137 void setPluginNamespace(
const nvinfer1::AsciiChar* libNamespace)
139 plugin_namespace =
const_cast<nvinfer1::AsciiChar*
>(libNamespace);
142 nvinfer1::AsciiChar
const* getPluginNamespace()
143 const noexcept
override {
144 return const_cast<nvinfer1::AsciiChar*
>(plugin_namespace);
147 bool supportsFormat(nvinfer1::DataType type,
148 nvinfer1::PluginFormat format)
const noexcept override {
152 void destroy() noexcept
override {
156 nvinfer1::IPluginV2Ext* clone() const noexcept
override {
157 ReLUPlugin* p =
new ReLUPlugin();
158 p->negative_slope_ = negative_slope_;
159 (p->input_dims_).nbDims = input_dims_.nbDims;
160 for (
int i = 0; i < input_dims_.nbDims; i++) {
161 (p->input_dims_).d[i] = input_dims_.d[i];
164 p->plugin_namespace = plugin_namespace;
168 bool isOutputBroadcastAcrossBatch(int32_t outputIndex,
169 bool const *inputIsBroadcasted, int32_t nbInputs)
170 const noexcept override {
174 bool canBroadcastInputAcrossBatch(int32_t inputIndex)
175 const noexcept override {
179 nvinfer1::DataType getOutputDataType(int32_t index,
180 nvinfer1::DataType
const *inputTypes, int32_t nbInputs)
182 return nvinfer1::DataType::kFLOAT;
185 void configurePlugin(
186 nvinfer1::Dims
const *inputDims, int32_t nbInputs,
187 nvinfer1::Dims
const *outputDims, int32_t nbOutputs,
188 nvinfer1::DataType
const *inputTypes, nvinfer1::DataType
const *outputTypes,
189 bool const *inputIsBroadcast,
bool const *outputIsBroadcast,
190 nvinfer1::PluginFormat floatFormat, int32_t maxBatchSize)
noexcept {}
193 float negative_slope_;
194 nvinfer1::Dims input_dims_;
196 nvinfer1::AsciiChar* plugin_namespace;
197 const nvinfer1::AsciiChar* plugin_type =
"";
198 const nvinfer1::AsciiChar* plugin_version =
"";