TensorRT 10.8.0
nvinfer1::IPluginV2 类参考abstract

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

#include <NvInferRuntimePlugin.h>

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

公共成员函数

virtual int32_t getTensorRTVersion () const noexcept
 返回构建此插件所使用的 API 版本。 更多...
 
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 void configureWithFormat (Dims const *inputDims, int32_t nbInputs, Dims const *outputDims, int32_t nbOutputs, DataType type, PluginFormat format, int32_t maxBatchSize) 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 IPluginV2clone () const noexcept=0
 克隆插件对象。这会复制内部插件参数,并返回一个包含这些参数的新插件对象。 更多...
 
virtual void setPluginNamespace (AsciiChar const *pluginNamespace) noexcept=0
 设置此插件对象所属的命名空间。理想情况下,来自同一插件库的所有插件对象必须具有相同的命名空间。 更多...
 
virtual AsciiChar const * getPluginNamespace () const noexcept=0
 返回插件对象的命名空间。 更多...
 

详细描述

用户实现层的插件类。

插件是应用程序实现自定义层的一种机制。当与 IPluginCreator 结合使用时,它提供了一种机制来注册插件并在反序列化期间查找插件注册表。

另请参阅
IPluginCreator
IPluginRegistry
已弃用
在 TensorRT 8.5 中已弃用。请改用 IPluginV3

成员函数文档

◆ clone()

virtual IPluginV2 * nvinfer1::IPluginV2::clone ( ) const
pure virtualnoexcept

克隆插件对象。这会复制内部插件参数,并返回一个包含这些参数的新插件对象。

在引擎创建后,当为引擎创建执行上下文时,TensorRT 运行时调用 clone() 来克隆插件。运行时不会对克隆的插件调用 initialize(),因此克隆的插件必须在已初始化的状态下创建。

返回值
一个已初始化的克隆插件对象,其参数与当前对象相同。如果克隆失败(例如,由于资源耗尽),则必须返回 nullptr。


使用注意事项

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

nvinfer1::IPluginV2DynamicExtnvinfer1::IPluginV2Ext 中实现。

◆ configureWithFormat()

virtual void nvinfer1::IPluginV2::configureWithFormat ( Dims const *  inputDims,
int32_t  nbInputs,
Dims const *  outputDims,
int32_t  nbOutputs,
DataType  type,
PluginFormat  format,
int32_t  maxBatchSize 
)
pure virtualnoexcept

配置层。

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

参数
inputDims输入张量维度。将是长度为 nbInputs 的 Dims 数组的起始地址。
nbInputs输入数量。将是非负整数。
outputDims输出张量维度。将是长度为 nbOutputs 的 Dims 数组的起始地址。
nbOutputs输出数量。将是与 getNbOutputs() 的返回值相同的正整数。
type为引擎选择的数据类型。
format为引擎选择的格式。
maxBatchSize最大批大小。将是正整数。

此处传递的维度不包括最外层的批大小(即,对于 2D 图像网络,它们将是 3 维 CHW 维度)。

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


使用注意事项

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

nvinfer1::IPluginV2Ext 中实现。

◆ destroy()

virtual void nvinfer1::IPluginV2::destroy ( )
pure virtualnoexcept

销毁插件对象。这将在网络、构建器或引擎销毁时调用。


使用注意事项

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

◆ enqueue()

virtual int32_t nvinfer1::IPluginV2::enqueue ( int32_t  batchSize,
void const *const *  inputs,
void *const *  outputs,
void *  workspace,
cudaStream_t  stream 
)
pure virtualnoexcept

执行层。

参数
batchSize批次中的输入数量。
inputs输入张量的内存。将是一个设备地址数组,对应于长度为 nbInputs 的输入张量,其中 nbInputs 是传递给 configureWithFormat() 的第二个参数。第 i 个输入张量将具有维度 inputDims[i],其中 inputDims 是传递给 configureWithFormat() 的第一个参数。
outputs输出张量的内存。将是一个设备地址数组,对应于长度为 getNbOutputs() 的输出张量。
workspace用于执行的工作区。将是设备缓冲区的起始地址,其长度至少为 getWorkspaceSize(batchSize)。
stream在其中执行内核的流。这将是一个有效的 CUDA 流。
返回值
成功返回 0,否则返回非零值(这将导致引擎终止)。


使用注意事项

  • API 调用的允许上下文
    • 线程安全:是,此方法需要是线程安全的,并且在运行时使用多个执行上下文时,可能会从多个线程调用。

◆ getNbOutputs()

virtual int32_t nvinfer1::IPluginV2::getNbOutputs ( ) const
pure virtualnoexcept

获取层的输出数量。

返回值
输出数量,这是一个正整数。

此函数由 INetworkDefinitionIBuilder 的实现调用。特别是,它在任何调用 initialize() 之前调用。


使用注意事项

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

◆ getOutputDimensions()

virtual Dims nvinfer1::IPluginV2::getOutputDimensions ( int32_t  index,
Dims const *  inputs,
int32_t  nbInputDims 
)
pure virtualnoexcept

获取输出张量的维度。

参数
index输出张量的索引。将位于有效范围内(介于 0 和 getNbOutputs()-1 之间,包括两者)。
inputs输入张量维度。将是长度为 nbInputDims 的 Dims 数组的起始地址。
nbInputDims输入张量的数量。将是非负整数。
返回值
如果索引在有效范围内,则为输出张量维度。如果索引不在有效范围内,则必须返回 Dims{-1, {}} 的无效值。

此函数由 INetworkDefinitionIBuilder 的实现调用。特别是,它在任何调用 initialize() 之前调用。


使用注意事项

  • API 调用的允许上下文
    • 线程安全:是,此方法需要是线程安全的,并且在多设备共享同一插件上构建网络时,可能会从多个线程调用。
注意
在任何非 IPluginV2DynamicExt 插件中,批大小不得包含在返回的维度中,即使插件预计将在启用显式批处理模式的网络中运行。有关插件输入和输出行为方式的更多详细信息,请参阅 TensorRT 开发者指南。

◆ getPluginNamespace()

virtual AsciiChar const * nvinfer1::IPluginV2::getPluginNamespace ( ) const
pure virtualnoexcept

返回插件对象的命名空间。

返回值
传递给 setPluginNamespace() 的命名空间字符串,如果传递了更长的字符串,则可能会截断为 1024 字节后返回。必须返回空字符串作为默认值。


使用注意事项

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

◆ getPluginType()

virtual AsciiChar const * nvinfer1::IPluginV2::getPluginType ( ) const
pure virtualnoexcept

返回插件类型。应与相应插件创建器返回的插件名称匹配。

另请参阅
IPluginCreator::getPluginName()
警告
返回的字符串必须以 NULL 结尾,并且长度(包括 NULL 终止符)为 1024 字节或更少。


使用注意事项

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

◆ getPluginVersion()

virtual AsciiChar const * nvinfer1::IPluginV2::getPluginVersion ( ) const
pure virtualnoexcept

返回插件版本。应与相应插件创建器返回的插件版本匹配。

另请参阅
IPluginCreator::getPluginVersion()
警告
返回的字符串必须以 NULL 结尾,并且长度(包括 NULL 终止符)为 1024 字节或更少。


使用注意事项

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

◆ getSerializationSize()

virtual size_t nvinfer1::IPluginV2::getSerializationSize ( ) const
pure virtualnoexcept

查找存储插件配置到二进制文件所需的序列化缓冲区大小。

返回值
序列化缓冲区的大小(以字节为单位)。


使用注意事项

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

◆ getTensorRTVersion()

virtual int32_t nvinfer1::IPluginV2::getTensorRTVersion ( ) const
inlinevirtualnoexcept

返回构建此插件所使用的 API 版本。

请勿覆盖此方法,因为它被 TensorRT 库用于维护与插件的向后兼容性。

返回值
TensorRT 版本格式为 (major * 100 + minor) * 100 + patch。


使用注意事项

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

nvinfer1::IPluginV2DynamicExt, nvinfer1::IPluginV2Ext, 和 nvinfer1::IPluginV2IOExt 中重新实现。

◆ getWorkspaceSize()

virtual size_t nvinfer1::IPluginV2::getWorkspaceSize ( int32_t  maxBatchSize) const
pure virtualnoexcept

查找层所需的工作区大小。

此函数在引擎启动期间、initialize() 之后调用。返回的工作区大小必须足以满足最大批大小。

参数
maxBatchSize最大批大小,这将是一个正整数。
返回值
工作区大小(以字节为单位),即插件内部计算所需的设备内存大小。


使用注意事项

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

◆ initialize()

virtual int32_t nvinfer1::IPluginV2::initialize ( )
pure virtualnoexcept

初始化层以供执行。这在创建引擎时调用。

返回值
成功返回 0,否则返回非零值(这将导致引擎终止)。


使用注意事项

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

◆ serialize()

virtual void nvinfer1::IPluginV2::serialize ( void *  buffer) const
pure virtualnoexcept

序列化层。

参数
buffer指向用于序列化数据的主机缓冲区的指针。缓冲区的大小将至少与 getSerializationSize 返回的值一样大。
另请参阅
getSerializationSize()


使用注意事项

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

◆ setPluginNamespace()

virtual void nvinfer1::IPluginV2::setPluginNamespace ( AsciiChar const *  pluginNamespace)
pure virtualnoexcept

设置此插件对象所属的命名空间。理想情况下,来自同一插件库的所有插件对象必须具有相同的命名空间。

参数
pluginNamespace插件对象的命名空间。
警告
字符串 pluginNamespace 将以 NULL 结尾,并且长度(包括 NULL 终止符)为 1024 字节或更少。


使用注意事项

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

◆ supportsFormat()

virtual bool nvinfer1::IPluginV2::supportsFormat ( DataType  type,
PluginFormat  format 
) const
pure virtualnoexcept

检查格式支持。

参数
type请求的数据类型。
format请求的插件格式。
返回值
如果插件支持类型-格式组合,则为 true。

此函数由 INetworkDefinition、IBuilder 和 safe::ICudaEngine/ICudaEngine 的实现调用。特别是,它在创建引擎和反序列化引擎时调用。

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


使用注意事项

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

◆ terminate()

virtual void nvinfer1::IPluginV2::terminate ( )
pure virtualnoexcept

释放插件层初始化期间获取的资源。这在引擎销毁时调用。

另请参阅
initialize()


使用注意事项

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

此类文档从以下文件生成

  版权所有 © 2024 NVIDIA Corporation
  隐私政策 | 管理我的隐私 | 请勿出售或分享我的数据 | 服务条款 | 可访问性 | 公司政策 | 产品安全 | 联系我们