TensorRT 10.8.0
nvinfer1::IPluginV2Ext 类参考abstract

用于用户实现层的插件类。 更多...

#include <NvInferRuntimePlugin.h>

nvinfer1::IPluginV2Ext 的继承关系图
nvinfer1::IPluginV2 nvinfer1::IPluginV2DynamicExt nvinfer1::IPluginV2IOExt

公共成员函数

virtual nvinfer1::DataType getOutputDataType (int32_t index, nvinfer1::DataType const *inputTypes, int32_t nbInputs) const noexcept=0
 返回请求索引处插件输出的 DataType。 更多...
 
virtual TRT_DEPRECATED bool isOutputBroadcastAcrossBatch (int32_t outputIndex, bool const *inputIsBroadcasted, int32_t nbInputs) const noexcept=0
 如果输出张量跨批次广播,则返回 true。 更多...
 
virtual TRT_DEPRECATED bool canBroadcastInputAcrossBatch (int32_t inputIndex) const noexcept=0
 如果插件可以使用跨批次广播而无需复制的输入张量,则返回 true。 更多...
 
virtual void configurePlugin (Dims const *inputDims, int32_t nbInputs, Dims const *outputDims, int32_t nbOutputs, DataType const *inputTypes, DataType const *outputTypes, bool const *inputIsBroadcast, bool const *outputIsBroadcast, PluginFormat floatFormat, int32_t maxBatchSize) noexcept=0
 使用输入和输出数据类型配置层。 更多...
 
 IPluginV2Ext ()=default
 
 ~IPluginV2Ext () override=default
 
virtual void attachToContext (cudnnContext *, cublasContext *, IGpuAllocator *) noexcept
 将插件对象附加到执行上下文,并授予插件访问某些上下文资源的权限。 更多...
 
virtual void detachFromContext () noexcept
 从其执行上下文中分离插件对象。 更多...
 
IPluginV2Extclone () const noexcept override=0
 克隆插件对象。这也会复制内部插件参数,并返回具有这些参数的新插件对象。如果源插件已使用 configurePlugin() 预配置,则返回的对象也必须是预配置的。返回的对象必须允许使用新的执行上下文 attachToContext()。克隆的插件对象可以与源对象共享相同的每个引擎的不可变资源(例如,权重)(例如,通过引用计数)以避免重复。 更多...
 
- 从 nvinfer1::IPluginV2 继承的公共成员函数
virtual AsciiChar const * getPluginType () const noexcept=0
 返回插件类型。应与相应插件创建器返回的插件名称匹配。 更多...
 
virtual AsciiChar const * getPluginVersion () const noexcept=0
 返回插件版本。应与相应插件创建器返回的插件版本匹配。 更多...
 
virtual int32_t getNbOutputs () const noexcept=0
 获取层输出的数量。 更多...
 
virtual Dims getOutputDimensions (int32_t index, Dims const *inputs, int32_t nbInputDims) noexcept=0
 获取输出张量的维度。 更多...
 
virtual bool supportsFormat (DataType type, PluginFormat format) const noexcept=0
 检查格式支持。 更多...
 
virtual int32_t initialize () noexcept=0
 初始化层以进行执行。这在创建引擎时调用。 更多...
 
virtual void terminate () noexcept=0
 释放插件层初始化期间获取的资源。这在销毁引擎时调用。 更多...
 
virtual size_t getWorkspaceSize (int32_t maxBatchSize) const noexcept=0
 查找层所需的工作区大小。 更多...
 
virtual int32_t enqueue (int32_t batchSize, void const *const *inputs, void *const *outputs, void *workspace, cudaStream_t stream) noexcept=0
 执行层。 更多...
 
virtual size_t getSerializationSize () const noexcept=0
 查找将插件配置存储在二进制文件中所需的序列化缓冲区的大小。 更多...
 
virtual void serialize (void *buffer) const noexcept=0
 序列化层。 更多...
 
virtual void destroy () noexcept=0
 销毁插件对象。这将在销毁网络、构建器或引擎时调用。 更多...
 
virtual void setPluginNamespace (AsciiChar const *pluginNamespace) noexcept=0
 设置此插件对象所属的命名空间。理想情况下,来自同一插件库的所有插件对象都必须具有相同的命名空间。 更多...
 
virtual AsciiChar const * getPluginNamespace () const noexcept=0
 返回插件对象的命名空间。 更多...
 

受保护成员函数

int32_t getTensorRTVersion () const noexcept override
 返回构建此插件的 API 版本。高位字节由 TensorRT 保留,用于将其与 IPluginV2 区分开来。 更多...
 
void configureWithFormat (Dims const *, int32_t, Dims const *, int32_t, DataType, PluginFormat, int32_t) noexcept override
 派生类不得实现此方法。在 C++11 API 中,它将是 override final。 更多...
 

详细描述

用于用户实现层的插件类。

插件是应用程序实现自定义层的一种机制。此接口通过支持不同的输出数据类型和跨批次广播,为 IPluginV2 接口提供额外的功能。

另请参阅
IPluginV2
已弃用
在 TensorRT 8.5 中已弃用。请改为实现 IPluginV3

构造函数和析构函数文档

◆ IPluginV2Ext()

nvinfer1::IPluginV2Ext::IPluginV2Ext ( )
default

◆ ~IPluginV2Ext()

nvinfer1::IPluginV2Ext::~IPluginV2Ext ( )
overridedefault

成员函数文档

◆ attachToContext()

virtual void nvinfer1::IPluginV2Ext::attachToContext ( cudnnContext *  ,
cublasContext *  ,
IGpuAllocator  
)
inlinevirtualnoexcept

将插件对象附加到执行上下文,并授予插件访问某些上下文资源的权限。

参数
cudnn执行上下文的 cuDNN 上下文句柄。将是有效的 cuDNN 上下文句柄,如果 TacticSource::kCUDNN 被禁用,则为 nullptr。
cublas执行上下文的 cuBLAS 上下文句柄。将是有效的 cuBLAS 上下文句柄,如果 TacticSource::kCUBLAS 被禁用,则为 nullptr。
allocator执行上下文使用的分配器

当创建新的执行上下文时,将自动为每个插件调用此函数。如果上下文是在没有资源的情况下创建的,则只有在分配资源后才会调用此方法。如果为上下文分配了新资源,也会调用此方法。

如果插件需要每个上下文的资源,则可以在此处分配。插件还可以获取上下文拥有的 cuDNN 和 cuBLAS 上下文。

注意
TacticSource::kCUDNNTacticSource::kCUBLAS 标志默认情况下被禁用。分配器指针对于每个具有重叠生命周期的构建或执行上下文实例是唯一的。它可以作为密钥来管理跨插件实例共享相同上下文的资源。附加到不同上下文的插件将具有不同的句柄,因为它们的执行不会重叠。
另请参阅
TacticSources
getPluginCudnnHandle(void* executionContextIdentifier)
getPluginCublasHandle(void* excecutionContextIdentifier)
注意
在汽车安全上下文中,cuDNN 和 cuBLAS 参数将为 nullptr,因为安全运行时不使用 cuDNN 和 cuBLAS。


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。

◆ canBroadcastInputAcrossBatch()

virtual TRT_DEPRECATED bool nvinfer1::IPluginV2Ext::canBroadcastInputAcrossBatch ( int32_t  inputIndex) const
pure virtualnoexcept

如果插件可以使用跨批次广播而无需复制的输入张量,则返回 true。

参数
inputIndex可能广播的输入的索引。将在 0 到 nbInputs - 1 的有效范围内,其中 nbInputs 是此插件支持的最大输入张量数。
返回值
如果索引在有效范围内,并且插件能够跨批次广播此输入张量的单个副本,则为 true。否则为 False。

对于每个张量在语义上跨批次广播的输入,TensorRT 在调用 configurePlugin 之前调用此方法。如果 canBroadcastInputAcrossBatch 返回 true,则 TensorRT 将不会复制输入张量;即,将有一个插件必须跨批次共享的单个副本。如果它返回 false,则 TensorRT 将复制输入张量,使其看起来像一个非广播张量。

此方法仅针对可以广播的输入调用。


使用注意事项

  • 允许 API 调用的上下文

    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。
    已弃用
    在 TensorRT 10.0 中已弃用。隐式批次支持在 TensorRT 10.0 中已删除。

◆ clone()

IPluginV2Ext * nvinfer1::IPluginV2Ext::clone ( ) const
overridepure virtualnoexcept

克隆插件对象。这也会复制内部插件参数,并返回具有这些参数的新插件对象。如果源插件已使用 configurePlugin() 预配置,则返回的对象也必须是预配置的。返回的对象必须允许使用新的执行上下文 attachToContext()。克隆的插件对象可以与源对象共享相同的每个引擎的不可变资源(例如,权重)(例如,通过引用计数)以避免重复。

返回值
如果克隆成功,则指向克隆插件对象的指针,否则为 nullptr。


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。

实现自 nvinfer1::IPluginV2

nvinfer1::IPluginV2DynamicExt 中实现。

◆ configurePlugin()

virtual void nvinfer1::IPluginV2Ext::configurePlugin ( Dims const *  inputDims,
int32_t  nbInputs,
Dims const *  outputDims,
int32_t  nbOutputs,
DataType const *  inputTypes,
DataType const *  outputTypes,
bool const *  inputIsBroadcast,
bool const *  outputIsBroadcast,
PluginFormat  floatFormat,
int32_t  maxBatchSize 
)
pure virtualnoexcept

使用输入和输出数据类型配置层。

此函数在 initialize() 之前由构建器调用。它为层提供了一个机会,使其可以根据其权重、维度、数据类型和最大批次大小来做出算法选择。

参数
inputDims输入张量维度。将是长度为 nbInputs 的数组。
nbInputs输入的数量。将是非负整数。
outputDims输出张量维度。将是长度为 nbOutputs 的数组。
nbOutputs输出的数量。将是正整数。
inputTypes为插件输入选择的数据类型。将是长度为 nbInputs 的数组。
outputTypes为插件输出选择的数据类型。将是长度为 nbOutputs 的数组。
inputIsBroadcast对于插件必须跨批次广播的每个输入,为 True。将是长度为 nbInputs 的数组。
outputIsBroadcast对于 TensorRT 将跨批次广播的每个输出,为 True。将是长度为 nbOutputs 的数组。
floatFormat为引擎选择的浮点输入/输出格式。
maxBatchSize最大批次大小。将是正整数。

此处传递的维度不包括最外层的批次大小(即,对于 2D 图像网络,它们将是 3 维 CHW 维度)。当 inputIsBroadcast 或 outputIsBroadcast 为 true 时,该输入或输出的最外层批次大小必须视为 1。只有当输入在语义上跨批次广播,并且使用参数 'i' 调用 canBroadcastInputAcrossBatch 返回 true 时,inputIsBroadcast 的索引 'i' 才为 true。只有当使用参数 'i' 调用 isOutputBroadcastAcrossBatch 返回 true 时,outputIsBroadcast 的索引 'i' 才为 true。

警告
对于 floatFormat 字段,将不会传入值 PluginFormat::kCHW4、PluginFormat::kCHW16 和 PluginFormat::kCHW32,这是为了保持与 TensorRT 5.x 系列的向后兼容性。对于其他 PluginFormat,请使用 PluginV2IOExt 或 PluginV2DynamicExt。


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。但是,TensorRT 不会从两个线程同时在插件的给定克隆上调用此方法。

◆ configureWithFormat()

void nvinfer1::IPluginV2Ext::configureWithFormat ( Dims const *  ,
int32_t  ,
Dims const *  ,
int32_t  ,
DataType  ,
PluginFormat  ,
int32_t   
)
inlineoverrideprotectedvirtualnoexcept

派生类不得实现此方法。在 C++11 API 中,它将是 override final。

IPluginV2Ext::configureWithFormat() 对于从 IPluginV2Ext 派生的所有类都是 NOP 操作。这些类改为调用 configurePlugin()

实现自 nvinfer1::IPluginV2

◆ detachFromContext()

virtual void nvinfer1::IPluginV2Ext::detachFromContext ( )
inlinevirtualnoexcept

从其执行上下文中分离插件对象。

当执行上下文被销毁或从上下文中取消分配上下文资源时,将自动为每个插件调用此函数。

如果插件拥有每个上下文的资源,则可以在此处释放。


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。

◆ getOutputDataType()

virtual nvinfer1::DataType nvinfer1::IPluginV2Ext::getOutputDataType ( int32_t  index,
nvinfer1::DataType const *  inputTypes,
int32_t  nbInputs 
) const
pure virtualnoexcept

返回请求索引处插件输出的 DataType。

参数
index输出张量索引,在 0 和 getNbOutputs()-1 之间的有效范围内。
inputTypes输入张量的数据类型,存储在长度为 nbInputs 的数组中。
nbInputs输入张量的数量。将是非负整数。
返回值
如果输入张量具有 inputTypes 中提供的数据类型,并且输出张量索引在有效范围内,则为具有提供的索引的输出张量的数据类型。如果索引不在有效范围内,则必须返回 DataType::kFLOAT

默认行为必须是返回第一个输入的类型,或者如果层没有输入,则返回 DataType::kFLOAT。返回的数据类型必须具有插件支持的格式。

另请参阅
supportsFormat()
警告
不支持 DataType:kBOOL 和 DataType::kUINT8


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。

◆ getTensorRTVersion()

int32_t nvinfer1::IPluginV2Ext::getTensorRTVersion ( ) const
inlineoverrideprotectedvirtualnoexcept

返回构建此插件的 API 版本。高位字节由 TensorRT 保留,用于将其与 IPluginV2 区分开来。

返回值
在低三位字节中,TensorRT 版本的格式为 (major * 100 + minor) * 100 + patch。在高位字节中,值为 1。

不要覆盖此方法,因为 TensorRT 库使用它来保持与插件的向后兼容性。


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此处提供的实现可以安全地从任何线程调用。

nvinfer1::IPluginV2 重新实现。

nvinfer1::IPluginV2IOExt 中重新实现。

◆ isOutputBroadcastAcrossBatch()

virtual TRT_DEPRECATED bool nvinfer1::IPluginV2Ext::isOutputBroadcastAcrossBatch ( int32_t  outputIndex,
bool const *  inputIsBroadcasted,
int32_t  nbInputs 
) const
pure virtualnoexcept

如果输出张量跨批次广播,则返回 true。

参数
outputIndex输出张量的索引,它将在 0 和 nbOutputs()-1 之间的有效范围内。
inputIsBroadcasted一个长度为 nbInputs 的布尔数组。当且仅当第 i 个输入的张量跨批次广播时,第 i 个元素为 true。
nbInputs输入的数量。将是非负整数。

inputIsBroadcasted 中的值指的是语义级别的广播,即不受方法 canBroadcastInputAcrossBatch 是否请求值的物理复制的影响。


使用注意事项

  • 允许 API 调用的上下文

    • 线程安全:是,此方法需要是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用。
    已弃用
    在 TensorRT 10.0 中已弃用。隐式批次支持在 TensorRT 10.0 中已删除。

此类文档从以下文件生成

  版权所有 © 2024 NVIDIA Corporation
  隐私政策 | 管理我的隐私 | 请勿出售或分享我的数据 | 服务条款 | 无障碍功能 | 公司政策 | 产品安全 | 联系方式