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 调用

Allocator#

enum nvidia::gxf::MemoryStorageType#

表示内存存储类型的枚举。

enumerator MemoryStorageType::kHost#

在主机上分配的页锁定/固定内存

enumerator MemoryStorageType::kDevice#

在设备/GPU 上分配的内存

enumerator MemoryStorageType::kSystem#

在堆上分配的内存

enum nvidia::gxf::AllocatorStage#

指定分配器的阶段。

enumerator AllocatorStage::kUninitialized#
enumerator AllocatorStage::kInitializationInProgress#
enumerator AllocatorStage::kInitialized#
enumerator AllocatorStage::kDeinitializationInProgress#
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,
) = 0#

分配给定大小和类型的内存块。

参数:
  • 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 – 分配器阶段。

返回值:

分配器阶段的字符串值。

CudaAllocator#

class nvidia::gxf::CudaAllocator : public Allocator#

提供具有流顺序内存分配器的内存分配和释放。

virtual ~CudaAllocator() = default#

析构函数。

virtual Expected<byte*> allocate(
uint64_t size,
cudaStream_t stream,
) = 0#

在给定的 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> 类型,表示指定类型的当前内存池大小;失败时返回错误代码。

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;否则返回错误代码。

Expected<Entity> receive()#

从主阶段接收下一个实体。

返回值:

接收到的实体。

size_t back_size()#

最近到达但尚未进入主阶段的实体总数。

返回值:

后台阶段中的实体数量。

Expected<void> sync()#

将最近到达的实体移动到主阶段。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> sync_io()#

同步 I/O。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> wait()#

等待实体到达。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<Entity> peekBack(int32_t index = 0)#

查看后台阶段中特定索引处的实体。

参数:

index – 要查看的实体的索引。

返回值:

查看的实体。

Expected<void> setTransmitter(Handle<Transmitter> tx)#

设置发射器以建立连接

参数:

tx – 要连接的发射器的句柄。

返回值:

Expected<void> 成功或失败时的错误代码

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()#

已发布但尚未进入主阶段的实体总数。

返回值:

后台阶段中的实体数量。

Expected<void> sync()#

将已发布的实体移动到主阶段。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> sync_io()#

同步 I/O。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> pop_io()#

弹出下一个实体。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<Entity> pop()#

弹出下一个实体。

返回值:

弹出的实体。

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> 成功或失败时的错误代码

Expected<void> unschedule(const Entity &entity)#

取消调度给定的实体。

参数:

entity – 要取消调度的实体。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> runAsync()#

异步运行系统。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> stop()#

停止系统。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> wait()#

等待系统完成。

返回值:

Expected<void> 成功或失败时的错误代码

Expected<void> event_notify(gxf_uid_t eid, gxf_event_t event)#

向系统通知事件。

参数:
  • eid – 与事件关联的实体的 UID。

  • event – 要向系统通知的事件。

返回值:

Expected<void> 成功或失败时的错误代码

调度器#

class nvidia::gxf::Scheduler : public System#

一个接口,它扩展了 nvidia::gxf::System 接口,用于创建可以执行代码小片段(codelet)的调度器。

virtual gxf_result_t prepare_abi(EntityExecutor *executor) = 0#

通过提供对实体执行器的访问来准备调度器以供执行

参数:

executor – 要准备的实体执行器。

返回值:

如果成功,则返回 GXF_SUCCESS;否则返回错误代码。

调度项#

class nvidia::gxf::SchedulingTerm#

调度项的基类。调度项被调度器用来确定实体中的代码小片段是否准备好执行。

virtual ~SchedulingTerm() = default#

析构函数。

virtual gxf_result_t check_abi(
int64_t timestamp,
SchedulingConditionType *type,
int64_t *target_timestamp,
) const = 0#

获取调度等待的条件,然后才允许执行。如果该项正在等待时间事件,则 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 如果函数执行成功,否则为错误代码。

Expected<SchedulingCondition> check(int64_t timestamp)#

检查调度条件并返回结果。

参数:

timestamp – 当前时间戳。

返回值:

如果函数执行成功,则为预期的调度条件,否则为意外错误。

Expected<void> onExecute(int64_t timestamp)#

每次此项的实体执行后调用。

参数:

timestamp – 当前时间戳。

返回值:

Expected<void> 成功或失败时的错误代码

路由器#

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> setClock(Handle<Clock> clock) = 0#

设置用于在发布消息时更新 pubtime 的时钟

参数:

clock – 要设置的时钟。

返回值:

Expected<void> 成功或失败时的错误代码

virtual Expected<void> addNetworkContext(
Handle<NetworkContext> context,
) = 0#

设置网络路由器要使用的网络上下文

参数:

context – 要设置的网络上下文。

返回值:

Expected<void> 成功或失败时的错误代码

时钟#

class nvidia::gxf::Clock#

用于跟踪时间的类

virtual double time() const = 0#

时钟的当前时间。时间以秒为单位。

返回值:

当前时间,以秒为单位。

virtual int64_t timestamp() const = 0#

时钟的当前时间戳。时间戳以纳秒为单位。

返回值:

当前时间戳,以纳秒为单位。

virtual Expected<void> sleepFor(int64_t duration_ns) = 0#

等待给定的持续时间在时钟上过去

参数:

duration_ns – 休眠持续时间,以纳秒为单位

返回值:

Expected<void> 成功或失败时的错误代码

virtual Expected<void> sleepUntil(int64_t target_ns) = 0#

等待给定的目标时间在时钟上过去

参数:

target_ns – 目标时间持续时间,等待直到,以纳秒为单位

返回值:

Expected<void> 成功或失败时的错误代码

基准测试#

基准测试控制器#

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();#

清除运行时状态。调用此函数足以重置新基准测试迭代的状态

基准测试接收器#

class nvidia::gxf::benchmark::BenchmarkSink#

一个基准测试接收器,用于记录消息到达时间戳

gxf::Expected<void> begin() override;#

发出基准测试迭代开始的信号

返回:

gxf::Expected<void> end() override;#

发出基准测试迭代结束的信号

返回:

gxf::Expected<void> reset() override;#

重置基准测试接收器和关联的性能计算器的状态

返回:

gxf::Expected<nlohmann::json> compute() override;#

计算已记录时间戳的性能结果。结果预计将缓存在相关的性能计算器中。

返回:

nlohmann::json conclude() override;#

从相关的性能计算器总结性能结果

返回:

std::vector<std::chrono::nanoseconds> &getReceivedTimestamps(
) override;#

已记录的接收时间戳的 Getter

返回:

gxf::Expected<std::vector<gxf::Handle<PerformanceCalculatorBase>>> getPerformanceCalculators(
) override;#

关联的性能计算器组件句柄的 Getter

返回:

gxf::Expected<std::vector<gxf::Handle<PerformanceCalculatorBase>>>

void clearRecordedTimestamps() override;#

清除运行时状态。调用此函数足以重置状态以进行新的基准测试迭代