GXF 组件接口#
Codelet#
-
class nvidia::gxf::Codelet#
Codelet 是允许执行自定义代码的特殊组件。用户可以通过从此类派生并重写函数
initialize()
、start()
、tick()
、stop()
和deinitialize()
来创建自己的 codelet。-
virtual ~Codelet() = default#
析构函数。
-
virtual gxf_result_t start()#
此函数在 codelet 的启动阶段被调用。它允许派生类在启动阶段执行自定义代码。这是获取 codelet 滴答(tick)所需的资源的理想位置。保证此函数在首次调用
tick()
之前被调用。- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t tick() = 0#
每当 codelet 预期执行工作时(例如,当收到事件或定期),都会调用此函数。
tick()
方法可以使用各种其他成员函数来指定。此函数是 codelet 的主要工作函数。- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t stop()#
此函数在 codelet 的停止阶段被调用。它允许派生类在停止阶段执行自定义代码。这是清理在“启动”期间获得的任何资源的理想位置。在 codelet 停止后,它应处于与调用“启动”之前相同的状态。请注意不要留下任何意外的残留物,因为之后可能会再次调用“启动”。保证在最后一次调用滴答(tick)后调用停止。当调用启动时,也会调用停止。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
int64_t getExecutionTimestamp() const#
启动、滴答(tick)或停止函数开始时的时间戳(以纳秒为单位)。执行时间戳在启动、滴答(tick)或停止函数期间不会更改。
- 返回值:
以纳秒为单位的执行时间戳。
-
double getExecutionTime() const#
类似于
getExecutionTimestamp()
,但以浮点数形式返回时间,并以秒为单位。等效于“ToSeconds(getExecutionCount())”。- 返回值:
以秒为单位的执行时间。
-
double getDeltaTime() const#
当前执行时间与上次执行时间的执行时间之间的增量。在启动函数期间,这将返回 0。
- 返回值:
以秒为单位的增量时间。
-
int64_t getExecutionCount() const#
返回 codelet 的执行次数。这将在启动期间返回 0,在第一次滴答(tick)期间返回 1。
- 返回值:
执行计数。
-
bool isFirstTick() const#
如果这是启动后首次调用滴答(tick),则返回 true。
- 返回值:
如果是第一次滴答(tick),则为 True,否则为 false。
-
void beforeStart(int64_t timestamp)#
在每次“启动”之前由 EntityExecutor 调用
- 参数:
timestamp – 来自时钟的当前时间戳。时间戳以纳秒为单位。
-
void beforeTick(int64_t timestamp)#
在每次“滴答(tick)”之前由 EntityExecutor 调用 :param timestamp: 来自时钟的当前时间戳。时间戳以纳秒为单位。
-
void beforeStop()#
在每次“停止”之前由 EntityExecutor 调用
-
virtual ~Codelet() = default#
Allocator#
-
enum nvidia::gxf::MemoryStorageType#
表示内存存储类型的枚举。
-
enumerator MemoryStorageType::kHost#
在主机上分配的页锁定/固定内存
-
enumerator MemoryStorageType::kDevice#
在设备/GPU 上分配的内存
-
enumerator MemoryStorageType::kSystem#
在堆上分配的内存
-
enumerator MemoryStorageType::kHost#
-
enum nvidia::gxf::AllocatorStage#
指定分配器的阶段。
-
class nvidia::gxf::Allocator#
提供内存的分配和释放。
-
virtual ~Allocator() = default#
析构函数。
-
virtual gxf_result_t is_available_abi(uint64_t size) = 0#
返回分配器是否可以提供给定大小的内存块。
- 参数:
size – 内存块的大小。
- 返回值:
如果可以提供内存块,则返回 GXF_SUCCESS;否则返回错误代码。
- virtual gxf_result_t allocate_abi(
- uint64_t size,
- int32_t type,
- void **pointer,
分配给定大小和类型的内存块。
- 参数:
size – 内存块的大小。
type – 要分配的内存类型。
pointer – 指向已分配内存块的指针。
- 返回值:
如果内存块已成功分配,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t free_abi(void *pointer) = 0#
释放先前分配的内存块。
- 参数:
pointer – 指向要释放的内存块的指针。
- 返回值:
如果内存块已成功释放,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual uint64_t block_size_abi() const = 0#
返回分配器的块大小。
- 返回值:
分配器的块大小。
-
Expected<byte*> allocate(uint64_t size, MemoryStorageType type)#
分配给定大小和类型的内存块。
- 参数:
size – 内存块的大小。
type – 要分配的内存类型。
- 返回值:
Expected<byte*> 指向新创建的内存的指针,如果失败,则返回错误代码。
-
Expected<void> free(byte *pointer)#
释放先前分配的内存块。
- 参数:
pointer – 指向要释放的内存块的指针。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
const char *allocator_stage_str(AllocatorStage stage) const#
返回分配器阶段的字符串值。
- 参数:
stage – 分配器阶段。
- 返回值:
分配器阶段的字符串值。
-
virtual ~Allocator() = default#
CudaAllocator#
-
class nvidia::gxf::CudaAllocator : public Allocator#
提供具有流顺序内存分配器的内存分配和释放。
-
virtual ~CudaAllocator() = default#
析构函数。
- virtual Expected<byte*> allocate(
- uint64_t size,
- cudaStream_t stream,
在给定的 CUDA 流上分配指定大小和类型的内存块。它在 CUDA 设备上异步执行分配,这意味着它不会在分配后同步 CUDA 流。这用于在设备上分配内存。
- 参数:
size – 内存块的大小。
stream – 用于分配内存的 Cuda 流。
- 返回值:
Expected<byte*> 指针,指向新创建的内存;失败时返回错误代码
-
virtual Expected<void> free(void *pointer, cudaStream_t stream) = 0#
在给定的 CUDA 流上异步释放先前分配的内存块。
- 参数:
pointer – 指向要释放的内存块的指针。
stream – 需要进行内存释放的 CUDA 流。
- 返回值:
Expected<void> 成功或失败时的错误代码
- gxf_result_t allocate_async_abi(
- uint64_t size,
- void **pointer,
- cudaStream_t stream,
在给定的 CUDA 流上分配指定大小和类型的内存块。
- 参数:
size – 内存块的大小。
pointer – 指向已分配内存块的指针。
stream – 在其上分配内存的 CUDA 流。
- 返回值:
如果内存块已成功分配,则返回 GXF_SUCCESS;否则返回错误代码。
-
gxf_result_t free_async_abi(void *pointer, cudaStream_t stream)#
在给定的 CUDA 流上异步释放先前分配的内存块。
- 参数:
pointer – 指向要释放的内存块的指针。
stream – 需要进行内存释放的 CUDA 流。
- 返回值:
如果内存块已成功分配,则返回 GXF_SUCCESS;否则返回错误代码。
-
Expected<size_t> get_pool_size(MemoryStorageType type) const#
检索指定类型的内存池的当前大小。
- 参数:
type – 我们从中获取池大小的内存类型。
- 返回值:
Expected<size_t> 类型,表示指定类型的当前内存池大小;失败时返回错误代码。
-
virtual ~CudaAllocator() = default#
Receiver#
-
class nvidia::gxf::Receiver#
用于接收实体的接口。
-
virtual gxf_result_t receive_abi(gxf_uid_t *uid) = 0#
从主阶段接收下一个实体。
- 参数:
uid – 接收到的实体的 UID。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual size_t back_size_abi() = 0#
最近到达但尚未进入主阶段的实体总数。
- 返回值:
后台阶段中的实体数量。
-
virtual gxf_result_t peek_back_abi(gxf_uid_t *uid, int32_t index) = 0#
查看后台阶段中特定索引处的实体。
- 参数:
uid – 索引处实体的 UID。
index – 要查看的实体的索引。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t sync_abi() = 0#
将最近到达的实体移动到主阶段。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t sync_io_abi()#
同步 I/O。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t wait_abi()#
等待实体到达。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
size_t back_size()#
最近到达但尚未进入主阶段的实体总数。
- 返回值:
后台阶段中的实体数量。
-
Expected<void> setTransmitter(Handle<Transmitter> tx)#
设置发射器以建立连接
- 参数:
tx – 要连接的发射器的句柄。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual gxf_result_t receive_abi(gxf_uid_t *uid) = 0#
Transmitter#
-
class nvidia::gxf::Transmitter#
用于发布实体的接口。
-
virtual gxf_result_t publish_abi(gxf_uid_t uid) = 0#
发布具有给定 UID 的实体。
- 参数:
uid – 要发布的实体的 UID。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual size_t back_size_abi() = 0#
先前已发布并移出主阶段的实体总数。
- 返回值:
后台阶段中的实体数量。
-
virtual gxf_result_t sync_abi() = 0#
将已发布的实体移动到主阶段。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t sync_io_abi()#
同步 I/O。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t pop_io_abi(gxf_uid_t *uid)#
弹出下一个实体。
- 参数:
uid – 弹出的实体的 UID。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
Expected<void> publish(const Entity &other)#
发布给定的实体。
- 参数:
other – 要发布的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
Expected<void> publish(Entity &other, const int64_t acq_timestamp)#
发布具有指定采集时间戳的给定实体。
- 参数:
other – 要发布的实体。
acq_timestamp – 实体的采集时间戳。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
size_t back_size()#
已发布但尚未进入主阶段的实体总数。
- 返回值:
后台阶段中的实体数量。
-
virtual gxf_result_t publish_abi(gxf_uid_t uid) = 0#
System#
-
class nvidia::gxf::System#
作为应用程序运行周期一部分运行的系统的组件接口。
-
virtual gxf_result_t schedule_abi(gxf_uid_t eid) = 0#
调度具有给定 UID 的实体。
- 参数:
eid – 要调度的实体的 UID。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t unschedule_abi(gxf_uid_t eid) = 0#
取消调度具有给定 UID 的实体。
- 参数:
eid – 要取消调度的实体的 UID。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t runAsync_abi() = 0#
异步运行系统。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t stop_abi() = 0#
停止系统。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
virtual gxf_result_t wait_abi() = 0#
等待系统完成执行。
- 返回值:
如果成功,则返回 GXF_SUCCESS;否则返回错误代码。
-
Expected<void> event_notify_abi(gxf_uid_t eid, gxf_event_t event)#
向系统通知事件。
- 参数:
eid – 与事件关联的实体的 UID。
event – 要向系统通知的事件。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
Expected<void> schedule(const Entity &entity)#
调度给定的实体。
- 参数:
entity – 要调度的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual gxf_result_t schedule_abi(gxf_uid_t eid) = 0#
调度器#
调度项#
-
class nvidia::gxf::SchedulingTerm#
调度项的基类。调度项被调度器用来确定实体中的代码小片段是否准备好执行。
-
virtual ~SchedulingTerm() = default#
析构函数。
- virtual gxf_result_t check_abi(
- int64_t timestamp,
- SchedulingConditionType *type,
- int64_t *target_timestamp,
获取调度等待的条件,然后才允许执行。如果该项正在等待时间事件,则 target_timestamp 将包含目标时间戳。
- 参数:
timestamp – 当前时间戳。
type – 指向变量的指针,该变量将包含调度条件类型。
target_timestamp – 指向变量的指针,如果调度条件正在等待时间事件,则该变量将包含目标时间戳。
- 返回值:
GXF_SUCCESS 如果函数执行成功,否则为错误代码。
-
virtual gxf_result_t onExecute_abi(int64_t dt) = 0#
每次此项的实体执行后调用。
- 参数:
dt – 当前时间戳。
- 返回值:
GXF_SUCCESS 如果函数执行成功,否则为错误代码。
-
virtual gxf_result_t update_state_abi(int64_t timestamp)#
检查是否可以更新调度项的状态并更新它。
- 参数:
timestamp – 当前时间戳。
- 返回值:
GXF_SUCCESS 如果函数执行成功,否则为错误代码。
-
virtual ~SchedulingTerm() = default#
路由器#
-
class nvidia::gxf::Router#
用于路由实体消息进出的对象的基类。
-
virtual Expected<void> addRoutes(const Entity &entity) = 0#
通知路由器关于新实体的消息。当新实体添加到系统时,会调用此函数。路由器使用此函数为实体的收件箱和发件箱设置任何必要的路由。
- 参数:
entity – 要为其添加路由的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual Expected<void> removeRoutes(const Entity &entity) = 0#
通知路由器关于实体移除的消息。当实体从系统移除时,会调用此函数。路由器使用此函数清理为实体的收件箱和发件箱设置的任何路由。
- 参数:
entity – 要为其移除路由的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual Expected<void> syncInbox(const Entity &entity) = 0#
同步实体的收件箱并准备执行。当实体被调度执行时,会调用此函数。路由器使用此函数同步实体的收件箱,确保任何新消息都可用于处理。
- 参数:
entity – 要为其同步收件箱的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual Expected<void> wait(const Entity &entity)#
此函数使路由器等待直到实体的收件箱有新消息。
- 参数:
entity – 要等待的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual Expected<void> syncOutbox(const Entity &entity) = 0#
在成功执行后同步实体的发件箱
- 参数:
entity – 要为其同步发件箱的实体。
- 返回值:
Expected<void> 成功或失败时的错误代码
-
virtual Expected<void> addRoutes(const Entity &entity) = 0#
时钟#
-
class nvidia::gxf::Clock#
用于跟踪时间的类
-
virtual double time() const = 0#
时钟的当前时间。时间以秒为单位。
- 返回值:
当前时间,以秒为单位。
-
virtual int64_t timestamp() const = 0#
时钟的当前时间戳。时间戳以纳秒为单位。
- 返回值:
当前时间戳,以纳秒为单位。
-
virtual double time() const = 0#
基准测试#
基准测试控制器#
-
class nvidia::gxf::benchmark::BenchmarkController#
一个基准测试控制器,用于管理整个基准测试流程
基准测试发布器#
-
class nvidia::gxf::benchmark::BenchmarkPublisher#
一个基准测试发布器,用于发布缓冲的基准测试消息
-
gxf::Handle<EntityBuffer> getEntityBuffer()#
底层实体缓冲区组件的 Getter
- 返回值:
gxf::Handle<EntityBuffer> 有效句柄或失败时的错误代码
-
std::vector<std::chrono::nanoseconds> &getPublishedTimestamps();#
记录的已发布时间戳的 Getter
- 返回值:
std::vector<std::chrono::nanoseconds> 已发布时间戳的向量
-
gxf::Handle<gxf::AsynchronousSchedulingTerm> getAsyncSchedulingterm();#
关联的异步调度项的 Getter
- 返回值:
gxf::Handle<gxf::AsynchronousSchedulingTerm> 有效句柄或失败时的错误代码
-
void setNumOfMessagesToPublish(uint64_t num_of_messages_to_publish);#
要发布的基准测试消息数量的 Setter
- 参数:
num_of_messages_to_publish – 要发布的消息数量。0 表示无限制
-
void clearRecordedTimestamps();#
清除运行时状态。调用此函数足以重置新基准测试迭代的状态
-
gxf::Handle<EntityBuffer> getEntityBuffer()#
基准测试接收器#
-
class nvidia::gxf::benchmark::BenchmarkSink#
一个基准测试接收器,用于记录消息到达时间戳
发出基准测试迭代开始的信号
- 返回:
发出基准测试迭代结束的信号
- 返回:
重置基准测试接收器和关联的性能计算器的状态
- 返回:
计算已记录时间戳的性能结果。结果预计将缓存在相关的性能计算器中。
- 返回:
-
nlohmann::json conclude() override;#
从相关的性能计算器总结性能结果
- 返回:
- std::vector<std::chrono::nanoseconds> &getReceivedTimestamps(
已记录的接收时间戳的 Getter
- 返回:
- gxf::Expected<std::vector<gxf::Handle<PerformanceCalculatorBase>>> getPerformanceCalculators(
关联的性能计算器组件句柄的 Getter
- 返回:
gxf::Expected<std::vector<gxf::Handle<PerformanceCalculatorBase>>>
-
void clearRecordedTimestamps() override;#
清除运行时状态。调用此函数足以重置状态以进行新的基准测试迭代