TensorRT 10.8.0
|
用于使用引擎执行推理的上下文,具有功能上不安全的功能。 更多...
#include <NvInferRuntime.h>
公共成员函数 | |
virtual | ~IExecutionContext () noexcept=default |
void | setDebugSync (bool sync) noexcept |
设置调试同步标志。 更多... | |
bool | getDebugSync () const noexcept |
获取调试同步标志。 更多... | |
void | setProfiler (IProfiler *profiler) noexcept |
设置性能分析器。 更多... | |
IProfiler * | getProfiler () const noexcept |
获取性能分析器。 更多... | |
ICudaEngine const & | getEngine () const noexcept |
获取关联的引擎。 更多... | |
void | setName (char const *name) noexcept |
设置执行上下文的名称。 更多... | |
char const * | getName () const noexcept |
返回执行上下文的名称。 更多... | |
void | setDeviceMemory (void *memory) noexcept |
设置此执行上下文使用的设备内存。 更多... | |
void | setDeviceMemoryV2 (void *memory, int64_t size) noexcept |
设置此执行上下文使用的设备内存及其相应大小。 更多... | |
Dims | getTensorStrides (char const *tensorName) const noexcept |
返回给定张量名称的缓冲区的步幅。 更多... | |
int32_t | getOptimizationProfile () const noexcept |
获取当前选定的优化配置文件的索引。 更多... | |
bool | setInputShape (char const *tensorName, Dims const &dims) noexcept |
设置给定输入的形状。 更多... | |
Dims | getTensorShape (char const *tensorName) const noexcept |
返回给定输入或输出的形状。 更多... | |
bool | allInputDimensionsSpecified () const noexcept |
是否已指定输入张量的所有动态维度。 更多... | |
TRT_DEPRECATED bool | allInputShapesSpecified () const noexcept |
是否已指定所有输入形状绑定。 更多... | |
void | setErrorRecorder (IErrorRecorder *recorder) noexcept |
为此接口设置 ErrorRecorder。 更多... | |
IErrorRecorder * | getErrorRecorder () const noexcept |
获取分配给此接口的 ErrorRecorder。 更多... | |
bool | executeV2 (void *const *bindings) noexcept |
同步执行网络。 更多... | |
bool | setOptimizationProfileAsync (int32_t profileIndex, cudaStream_t stream) noexcept |
使用异步语义为当前上下文选择一个优化配置文件。 更多... | |
void | setEnqueueEmitsProfile (bool enqueueEmitsProfile) noexcept |
设置入队是否将层计时信息发送到性能分析器。 更多... | |
bool | getEnqueueEmitsProfile () const noexcept |
获取 enqueueEmitsProfile 状态。 更多... | |
bool | reportToProfiler () const noexcept |
在 IExecutionContext 中计算当前优化配置文件的层计时信息,并在一次推理启动后更新性能分析器。 更多... | |
bool | setTensorAddress (char const *tensorName, void *data) noexcept |
设置给定输入或输出张量的内存地址。 更多... | |
void const * | getTensorAddress (char const *tensorName) const noexcept |
获取绑定到给定输入或输出张量的内存地址,如果提供的名称未映射到输入或输出张量,则返回 nullptr。 更多... | |
bool | setOutputTensorAddress (char const *tensorName, void *data) noexcept |
设置给定输出张量的内存地址。 更多... | |
bool | setInputTensorAddress (char const *tensorName, void const *data) noexcept |
设置给定输入的内存地址。 更多... | |
void * | getOutputTensorAddress (char const *tensorName) const noexcept |
获取给定输出的内存地址。 更多... | |
int32_t | inferShapes (int32_t nbMaxNames, char const **tensorNames) noexcept |
运行形状计算。 更多... | |
size_t | updateDeviceMemorySizeForShapes () noexcept |
基于当前的输入形状重新计算内部激活缓冲区大小,并返回所需的总内存量。 更多... | |
bool | setInputConsumedEvent (cudaEvent_t event) noexcept |
标记输入为已消耗。 更多... | |
cudaEvent_t | getInputConsumedEvent () const noexcept |
与消耗输入关联的事件。 更多... | |
bool | setOutputAllocator (char const *tensorName, IOutputAllocator *outputAllocator) noexcept |
设置用于给定名称的输出张量的输出分配器。传递 nullptr 给 outputAllocator 以取消设置。分配器由 enqueueV3() 调用。 更多... | |
IOutputAllocator * | getOutputAllocator (char const *tensorName) const noexcept |
获取与给定名称的输出张量关联的输出分配器,如果提供的名称未映射到输出张量,则返回 nullptr。 更多... | |
int64_t | getMaxOutputSize (char const *tensorName) const noexcept |
基于当前的优化配置文件和输入维度,获取输出张量大小(以字节为单位)的上限。 更多... | |
bool | setTemporaryStorageAllocator (IGpuAllocator *allocator) noexcept |
指定用于内部临时存储的分配器。 更多... | |
IGpuAllocator * | getTemporaryStorageAllocator () const noexcept |
获取由 setTemporaryStorageAllocator 设置的分配器。 更多... | |
bool | enqueueV3 (cudaStream_t stream) noexcept |
在流上入队推理。 更多... | |
void | setPersistentCacheLimit (size_t size) noexcept |
设置持久缓存使用的最大大小。 更多... | |
size_t | getPersistentCacheLimit () const noexcept |
获取持久缓存使用的最大大小。 更多... | |
bool | setNvtxVerbosity (ProfilingVerbosity verbosity) noexcept |
设置执行上下文中 NVTX 标记的详细程度。 更多... | |
ProfilingVerbosity | getNvtxVerbosity () const noexcept |
获取执行上下文的 NVTX 详细程度。 更多... | |
void | setAuxStreams (cudaStream_t *auxStreams, int32_t nbStreams) noexcept |
设置 TensorRT 应在下一次 enqueueV3() 调用中在其上启动内核的辅助流。 更多... | |
bool | setDebugListener (IDebugListener *listener) noexcept |
为此执行上下文设置 DebugListener。 更多... | |
IDebugListener * | getDebugListener () noexcept |
获取此执行上下文的 DebugListener。 更多... | |
bool | setTensorDebugState (char const *name, bool flag) noexcept |
设置给定张量名称的张量的调试状态。 更多... | |
bool | setAllTensorsDebugState (bool flag) noexcept |
bool | getDebugState (char const *name) const noexcept |
保护属性 | |
apiv::VExecutionContext * | mImpl |
附加的继承成员 | |
![]() | |
INoCopy ()=default | |
virtual | ~INoCopy ()=default |
INoCopy (INoCopy const &other)=delete | |
INoCopy & | operator= (INoCopy const &other)=delete |
INoCopy (INoCopy &&other)=delete | |
INoCopy & | operator= (INoCopy &&other)=delete |
用于使用引擎执行推理的上下文,具有功能上不安全的功能。
一个 ICudaEngine 实例可以存在多个执行上下文,从而允许同一个引擎同时用于执行多个批次。如果引擎支持动态形状,则并发使用的每个执行上下文都必须使用单独的优化配置文件。
|
virtualdefaultnoexcept |
|
inlinenoexcept |
是否已指定输入张量的所有动态维度。
如果网络没有动态形状的输入张量,则始终为 true。
不适用于基于名称的接口,例如 IExecutionContext::setInputShape()。请改用 IExecutionContext::inferShapes()。
|
inlinenoexcept |
是否已指定所有输入形状绑定。
如果网络没有输入形状绑定,则始终为 true。
不适用于基于名称的接口,例如 IExecutionContext::setInputShape()。请改用 IExecutionContext::inferShapes()。
|
inlinenoexcept |
在流上入队推理。
stream | 将在其上入队推理内核的 CUDA 流。 |
在流同步或传递给 setInputConsumedEvent 的事件被触发之前,修改或释放已为张量注册的内存会导致未定义的行为。输入张量可以在 setInputConsumedEvent 之后释放,而输出张量需要流同步。
|
inlinenoexcept |
同步执行网络。
此方法需要输入和输出缓冲区数组。可以使用 ICudaEngine::getIOTensorName() 查询从索引到张量名称的映射。
bindings | 网络输入和输出缓冲区的指针数组。 |
|
inlinenoexcept |
获取此执行上下文的 DebugListener。
|
inlinenoexcept |
获取调试状态。
|
inlinenoexcept |
获取调试同步标志。
|
inlinenoexcept |
获取关联的引擎。
|
inlinenoexcept |
获取 enqueueEmitsProfile 状态。
|
inlinenoexcept |
获取分配给此接口的 ErrorRecorder。
检索给定类别的已分配错误记录器对象。如果未设置错误处理程序,则将返回 nullptr。
|
inlinenoexcept |
与消耗输入关联的事件。
|
inlinenoexcept |
基于当前的优化配置文件和输入维度,获取输出张量大小(以字节为单位)的上限。
如果尚未设置配置文件或输入维度,或者提供的名称未映射到输出,则返回 -1。
tensorName | 输出张量的名称。 |
|
inlinenoexcept |
返回执行上下文的名称。
|
inlinenoexcept |
|
inlinenoexcept |
获取当前选定的优化配置文件的索引。
如果尚未设置配置文件索引(如果尚未将其他执行上下文设置为配置文件 0,则隐式设置为 0,或者为所有后续上下文显式设置),则将返回无效值 -1,并且所有对 enqueueV3()/executeV2() 的调用都将失败,直到设置了有效的配置文件索引。此行为在 TensorRT 8.6 中已弃用,所有配置文件都将默认为优化配置文件 0,并且不再返回 -1。
|
inlinenoexcept |
获取与给定名称的输出张量关联的输出分配器,如果提供的名称未映射到输出张量,则返回 nullptr。
|
inlinenoexcept |
获取给定输出的内存地址。
tensorName | 输出张量的名称。 |
如果只需要 (void const*) 指针,则另一种方法是调用方法 getTensorAddress()。
|
inlinenoexcept |
|
inlinenoexcept |
获取性能分析器。
|
inlinenoexcept |
获取由 setTemporaryStorageAllocator 设置的分配器。
如果使用 setTemporaryStorageAllocator() 传递了 nullptr,则返回 nullptr。
|
inlinenoexcept |
获取绑定到给定输入或输出张量的内存地址,如果提供的名称未映射到输入或输出张量,则返回 nullptr。
tensorName | 输入或输出张量的名称。 |
如果需要输出张量的非 const 指针,请使用方法 getOutputTensorAddress()。
|
inlinenoexcept |
返回给定输入或输出的形状。
tensorName | 输入或输出张量的名称。 |
如果提供的名称未映射到输入或输出张量,则返回 Dims{-1, {}}。否则,返回输入或输出张量的形状。
如果以下所有条件都为真,则输入张量中的维度将具有 -1 通配符值
如果维度依赖于执行张量的值,或者如果以下所有条件都为真,则输出张量中的维度将具有 -1 通配符值
如果输出张量的形状取决于提供给 enqueueV3() 的张量的值,则输出张量也可能具有 -1 通配符维度。
如果请求的是具有运行时维度的输出张量的形状,则所有 isShapeInferenceIO() = true 的输入张量都应已设置其值,因为可能需要这些值来计算输出形状。
隐式约束为单个值的输入维度的示例
|
inlinenoexcept |
返回给定张量名称的缓冲区的步幅。
步幅以元素为单位,而不是以组件或字节为单位。例如,对于 TensorFormat::kHWC8,步幅为 1 跨越 8 个标量。
请注意,对于具有动态形状的不同执行上下文,步幅可能不同。
如果提供的名称未映射到输入或输出张量,或者存在尚未设置的动态维度,则返回 Dims{-1, {}}
tensorName | 输入或输出张量的名称。 |
|
inlinenoexcept |
运行形状计算。
nbMaxNames | 要写入 tensorNames 的最大名称数量。当返回值是正值 n 且 tensorNames != nullptr 时,未充分指定的输入张量的名称将写入 tensorNames 中的 min(n,nbMaxNames) 个。 |
tensorNames | 用于放置未充分指定的输入张量的名称的缓冲区。 |
如果满足以下任一条件,则输入张量未充分指定
如果输出张量具有 isShapeInferenceIO(t)=true 且已指定其地址,则会写入其值。
如果 tensorNames == nullptr 且 nbMaxNames != 0,则返回 -1。如果 nbMaxNames < 0,则返回 -1。如果张量的维度无效,例如张量最终具有负维度,则返回 -1。
|
inlinenoexcept |
在 IExecutionContext 中计算当前优化配置文件的层计时信息,并在一次推理启动后更新性能分析器。
如果 IExecutionContext::getEnqueueEmitsProfile() 返回 true,则如果提供了性能分析器,则入队函数将隐式计算层计时。此函数返回 true 且不执行任何操作。
如果 IExecutionContext::getEnqueueEmitsProfile() 返回 false,则如果提供了性能分析器,则入队函数将记录 CUDA 事件计时器。但它不会执行层计时计算。需要显式调用 IExecutionContext::reportToProfiler() 以计算上一次推理启动的层计时。
在 CUDA 图启动场景中,如果图是从启用了性能分析器的 IExecutionContext 捕获的,它将记录与常规入队函数中相同的一组 CUDA 事件。需要在图启动后调用此函数,以将层计时信息报告给性能分析器。
|
inlinenoexcept |
打开或关闭所有调试张量的调试状态。
flag | 如果打开调试状态,则为 true,如果关闭调试状态,则为 false。 |
默认情况下为关闭。
|
inlinenoexcept |
设置 TensorRT 应在下一次 enqueueV3() 调用中在其上启动内核的辅助流。
如果已设置,TensorRT 将使用用户通过此 API 提供的流来启动本应在辅助流上运行的内核。如果在 enqueueV3() 调用之前未调用此 API,则 TensorRT 将使用 TensorRT 内部创建的辅助流。
TensorRT 将始终在通过 enqueueV3() 调用提供的主流和辅助流之间插入事件同步
auxStreams | 指向 cudaStream_t 数组的指针,数组长度等于 nbStreams。 |
nbStreams | 提供的辅助流的数量。如果 nbStreams 大于 engine->getNbAuxStreams() ,则只会使用前 engine->getNbAuxStreams() 个流。如果 nbStreams 小于 engine->getNbAuxStreams() ,例如将 nbStreams 设置为 0,那么 TensorRT 将为前 nbStreams 个辅助流使用提供的流,并将内部创建额外的流用于其余的辅助流。 |
|
inlinenoexcept |
为此执行上下文设置 DebugListener。
listener | 此执行上下文的 DebugListener。 |
|
inlinenoexcept |
|
inlinenoexcept |
为此执行上下文设置设备内存以供使用。
内存必须与 CUDA 内存对齐属性(使用 cudaGetDeviceProperties())对齐,并且其大小必须足够大,以便使用给定的网络输入执行推理。getDeviceMemorySize() 和 getDeviceMemorySizeForProfile() 报告大小的上限。如果报告的大小为 0,则可以将内存设置为 nullptr。如果使用 enqueueV3() 运行网络,则内存从调用 enqueueV3() 开始使用,直到网络执行完成。如果使用 executeV2(),则内存将一直使用到 executeV2() 返回。在此期间释放内存或将其用于其他目的,包括在并行运行的另一个执行上下文中使用它,将导致未定义的行为。
|
inlinenoexcept |
为此执行上下文设置设备内存及其对应的大小以供使用。
内存必须与 CUDA 内存对齐属性(使用 cudaGetDeviceProperties())对齐,并且其大小必须足够大,以便使用给定的网络输入执行推理。getDeviceMemorySize() 和 getDeviceMemorySizeForProfile() 报告大小的上限。如果报告的大小为 0,则可以将内存设置为 nullptr。如果使用 enqueueV3() 运行网络,则内存从调用 enqueueV3() 开始使用,直到网络执行完成。如果使用 executeV2(),则内存将一直使用到 executeV2() 返回。在此期间释放内存或将其用于其他目的,包括在并行运行的另一个执行上下文中使用它,将导致未定义的行为。
|
inlinenoexcept |
设置 enqueue 是否向分析器发出层计时信息。
如果设置为 true(默认值),则 enqueue 是同步的,并且如果附加了分析器,则会隐式执行层计时分析。如果设置为 false,并且附加了分析器,则 enqueue 将是异步的。需要调用额外的方法 reportToProfiler() 以获取分析数据并报告给附加的分析器。
|
inlinenoexcept |
为此接口设置 ErrorRecorder。
将 ErrorRecorder 分配给此接口。ErrorRecorder 将跟踪执行期间的所有错误。此函数将至少调用一次已注册的 ErrorRecorder 的 incRefCount。将 recorder 设置为 nullptr 将取消注册接口的记录器,如果已注册记录器,则会导致调用 decRefCount。
如果未设置错误记录器,消息将发送到全局日志流。
recorder | 要在此接口中注册的错误记录器。 |
|
inlinenoexcept |
标记输入为已消耗。
event | 在所有输入张量都被消耗后触发的 CUDA 事件。 |
传递 event==nullptr 会移除已设置的任何事件(如果有)。
|
inlinenoexcept |
设置给定输入的形状。
tensorName | 输入张量的名称。 |
dims | 输入张量的形状。 |
除非后者为 -1,否则每个维度都必须与网络维度一致。
|
inlinenoexcept |
设置给定输入的内存地址。
tensorName | 输入张量的名称。 |
data | 用户拥有的 const 数据的指针 (void const*)。 |
也可以使用方法 setTensorAddress 设置输入地址,该方法需要 (void*)。
有关对齐和数据类型约束,请参阅方法 setTensorAddress() 的描述。
|
inlinenoexcept |
|
inlinenoexcept |
设置执行上下文中 NVTX 标记的详细程度。
以 kDETAILED 详细程度构建通常会增加 enqueueV3() 中的延迟。在运行时调用此方法以选择此执行上下文中的 NVTX 详细程度。
默认值是构建引擎时使用的详细程度,并且详细程度可能不会高于该级别。
此函数不影响 IEngineInspector 与引擎的交互方式。
verbosity | NVTX 标记的详细程度。 |
|
inlinenoexcept |
使用异步语义为当前上下文选择优化配置文件。
profileIndex | 配置文件的索引。该值必须介于 0 和 getEngine().getNbOptimizationProfiles() - 1 之间 |
stream | 可能在上面排队 cudaMemcpyAsync 的 CUDA 流 |
当通过此 API 切换优化配置文件时,TensorRT 可能需要通过 cudaMemcpyAsync 复制数据。应用程序有责任保证配置文件同步流和 enqueue 流之间发生同步。
所选配置文件将用于后续对 executeV2()/enqueueV3() 的调用。如果关联的 CUDA 引擎具有动态形状的输入,则在调用 execute 或 enqueue 之前,必须使用其对应的 profileIndex 设置优化配置文件。新创建的执行上下文将被分配优化配置文件 0。
如果关联的 CUDA 引擎没有具有动态形状的输入,则不需要调用此方法,在这种情况下,将使用默认配置文件索引 0。
在为所有动态输入张量或输入形状张量调用 setInputShape() 之前,必须调用 setOptimizationProfileAsync(),而 setInputShape() 又必须在 executeV2()/enqueueV3() 之前调用。
|
inlinenoexcept |
设置用于给定名称的输出张量的输出分配器。传递 nullptr 给 outputAllocator 以取消设置。分配器由 enqueueV3() 调用。
tensorName | 输出张量的名称。 |
outputAllocator | 张量的 IOutputAllocator。 |
|
inlinenoexcept |
为给定的输出张量设置内存地址。
tensorName | 输出张量的名称。 |
data | 要将输出写入的缓冲区的指针。 |
输出地址也可以使用方法 setTensorAddress 设置。提供此方法是为了方便应用程序喜欢使用不同的方法来设置输入和输出张量。
有关对齐和数据类型约束,请参阅 setTensorAddress()。
|
inlinenoexcept |
设置持久缓存使用的最大大小。
此函数设置此执行上下文可能用于激活缓存的最大持久 L2 缓存。并非所有架构都支持激活缓存 - 有关详细信息,请参阅开发者指南中的“TensorRT 如何使用内存”
size | 持久缓存限制的大小(以字节为单位)。默认值为 0 字节。 |
|
inlinenoexcept |
设置分析器。
|
inlinenoexcept |
指定用于内部临时存储的分配器。
此分配器仅由 enqueueV3() 用于大小无法在 enqueueV3() 之前预测的临时存储。它不用于输出张量,因为这些张量的内存分配由 setOutputAllocator() 设置的分配器分配。所有分配的内存都在 enqueueV3() 返回时释放。
allocator | 要使用的分配器的指针。传递 nullptr 以恢复为使用 TensorRT 的默认分配器。 |
|
inlinenoexcept |
设置给定输入或输出张量的内存地址。
tensorName | 输入或输出张量的名称。 |
data | 用户拥有的数据指针 (void*)。 |
地址默认为 nullptr。传递 data=nullptr 以重置为默认状态。
如果提供的名称未映射到输入或输出张量,则返回 false。
如果输入指针的类型为 (void const*),请改用 setInputTensorAddress()。
在调用 enqueueV3() 之前,每个输入都必须具有非空地址,并且每个输出都必须具有非空地址或 IOutputAllocator 以稍后设置它。
如果张量的 TensorLocation 为 kHOST
如果张量的 TensorLocation 为 kDEVICE
如果在设置所有输入形状后,getTensorShape(name) 报告输出的任何维度为 -1,请使用 setOutputAllocator() 以关联一个 IOutputAllocator,已知维度时将报告给它。
允许为同一输出同时调用 setTensorAddress 和 setOutputAllocator(),并且对于预分配内存,然后在内存不够大时重新分配内存可能很有用。
指针必须至少具有 256 字节的对齐。
|
inlinenoexcept |
设置给定张量的调试状态,指定张量名称。
打开或关闭张量的调试状态。具有参数张量名称的张量必须存在于网络中,并且该张量必须在构建时标记为调试张量。否则,将抛出错误。
name | 目标张量的名称。 |
flag | True 表示打开调试状态,false 表示关闭张量的调试状态。默认值为关闭。 |
|
inlinenoexcept |
根据当前的输入形状重新计算内部激活缓冲区大小,并返回所需的总内存量。
用户可以根据返回的大小分配设备内存,并使用 IExecutionContext::setDeviceMemory() 将内存提供给 TRT。必须在调用此函数之前指定所有输入形状和要使用的优化配置文件,否则分区将失效。
|
protected |
版权所有 © 2024 NVIDIA Corporation
隐私政策 | 管理我的隐私 | 请勿出售或分享我的数据 | 服务条款 | 无障碍访问 | 公司政策 | 产品安全 | 联系我们