一个自定义插件需要实现两个类,分别继承于
class MyPluginDynamic : public IPluginV2DynamicEx
class MyPluginDynamicCreator : public IPluginCreator
然后使用
REGISTER_TENSORRT_PLUGIN(MyPluginDynamicCreator);
看其详细定义,也就是将这个插件加入到一个全局链表中,方便trtexec根据op name来查找该插件,这个实现跟ffmpeg中注册编解码器是一个思路
#define REGISTER_TENSORRT_PLUGIN(name)
static nvinfer1::PluginRegistrar<name> pluginRegistrar##name {}
#endif // NV_INFER_RUNTIME_H
下面是method详细的调用过程:
Creator:
MyPluginDynamicCreator
getPluginName (连续被调用两次)
getPluginNamespace
getPluginVersion
================================
Plugin:
getPluginVersion
getPluginNamespace
getPluginNamespace
getFieldNames
createPlugin
MyPluginDynamic
getNbOutputs
getOutputDataType
getNbOutputs
clone
MyPluginDynamic
setPluginNamespace
getPluginType
destroy
~MyPluginDynamic
getOutputDimensions
getOutputDataType
getOutputDimensions
=====