graph - 2023.2 简体中文

AI 引擎内核与计算图编程指南 (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 简体中文

这是由 ADF 工具导出的主 graph 抽象。用户定义的所有 graph 都应继承自 class graph

作用域

如果用户定义各种类型的 graph 构成用户设计的一部分,那么这些 graph 的所有实例都必须在全局作用域内声明,但可在任意名称空间下声明。

成员函数

virtual return_code init() ;

此方法会使用一组预定义的处理器 tile(拼块)将预编译的 graph 对象初始化到 AI 引擎阵列上。当前不支持任何重定位操作。程序存储器、数据存储器和串流开关中属于正在加载的拼块的所有现有信息都将被替换。加载的处理器将保持处于禁用状态。

virtual return_code run();
virtual return_code run(unsigned int num_iterations);

此方法会启用与 graph 关联的处理器,并使其从各自 main 程序开始时即开始执行。如无任何实参,此 graph 将永久运行。含实参的 API 可为每轮运行设置不同的迭代次数。这在 PS 应用上属于非阻塞运算。

virtual return_code end();
virtual return_code end(unsigned int cycle_timeout);

end 方法用于等待 graph 的终止。当 graph 的所有活动处理器都退出其 main 线程并禁用自身后,此 graph 即被视为已终止。这对于 PS 应用属于阻塞运算。此方法还会清除 graph 的状态,例如强制释放所有锁定和清除 graph 中使用的串流开关配置。含周期超时的 end 方法会在超时到期时终止并清除 graph,而不会等待任何 graph 相关的事件。如果在执行 end 后尝试对 graph 执行 run,而不对其进行重新初始化,则可能导致不可预测的结果。

virtual return_code wait();
virtual return_code wait(unsigned int cycle_timeout);

virtual return_code resume();

wait 方法用于暂停执行 graph,而不清理其状态,这样即可通过 runresume 方法来重新启动此 graph。不含实参的 wait 在等待先前含固定迭代次数的 run 完成时很有用。它可后接另一次 run 操作(含一组新的迭代)。含周期超时的 wait 方法会在超时到期(从前一次 runresume 调用开始计数)时暂停执行此 graph。此方法仅限后接 resume 才能允许 graph 继续执行。在完成含周期超时的 wait 后尝试执行 run 可能导致不可预测的结果,因为 graph 暂停时可能处于不可预测的状态,并且 run 可能从处理器的 main 程序开始状态重新启动处理器。

virtual return_code update(input_port& pName, <type> value);

virtual return_code update(input_port& pName, const <type>* value, size_t size);

这些方法均属于各种不同形式的运行时参数更新 API,可用于更新标量或阵列运行时参数端口。端口名称是完全限定的路径名称,例如,graph1.graph2.portgraph1.graph2.kernel.port<type> 可取下列任一值:int8int16int32int64uint8uint16uint32uint64cint16cint32floatcfloat。对于阵列运行时参数更新,size 实参可指定要更新的阵列中的元素数量。此 size 必须与 graph 中定义的 RTP 阵列大小相匹配,即整个 RTP 阵列必须一次性完成更新。

virtual return_code read(input_port& pName, <type>& value);

virtual return_code read(input_port& pName, <type>* value, size_t size);

这些方法均属于各种不同形式的运行时参数读取 API,可用于读取标量或阵列运行时参数端口。端口名称是完全限定的路径名称,例如,graph1.graph2.portgraph1.graph2.kernel.port<type> 可取下列任一值:int8int16int32int64uint8uint16uint32uint64cint16cint32floatcfloat。对于阵列运行时参数读取,size 实参可指定要读取的阵列中的元素数量。