asc_lock
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| √ |
功 能 说 明
该 接 口 用 于AI Core内 部 异 步 流 水 线 之 间 的 同 步,可 按 需 阻 塞 指 定 流 水 线 的 执 行。
函 数 原 型
C++
enum ascMutexExecuteMode {
ASC_LOCK_BLOCK = 0,
ASC_LOCK_NON_BLOCK = 1
};
__aicore__ inline void asc_lock(pipe_t pipe, uint8_t mutex_id)
__aicore__ inline void asc_lock(pipe_t pipe, uint8_t mutex_id, const ascMutexExecuteMode mode)
参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| pipe | 输 入 | 指 定 当 前 接 口 所 属 的 流 水 类 型。 |
| mutex_id | 输 入 | mutex标 号,取 值 范 围 为[0, 31]。 |
| mode | 输 入 | 可 选 参 数,用 于 指 定 是 否 阻 塞 流 水 线,默 认 值 为ASC_LOCK_BLOCK。 • ASC_LOCK_BLOCK:阻 塞pipe对 应 流 水 线 的 执 行,直 到 代 码 中 位 于 当 前asc_lock之 前 且mutex_id相 同 的 所 有asc_unlock调 用 均 已 执 行 完 成。 • ASC_LOCK_NON_BLOCK:不 阻 塞pipe对 应 流 水 线 的 执 行。 |
返 回 值 说 明
无
流 水 类 型
PIPE_S
约 束 说 明
- asc_lock与asc_unlock必 须 严 格 成 对 使 用,并 使 用 相 同 的mutex_id与mode。此 外,对 应 的asc_unlock必 须 始 终 写 在asc_lock之 后,否 则 硬 件 行 为 无 定 义。
- 对 于mutex_id相 同 的asc_lock与asc_unlock组 合,无 论pipe和mode是 否 相 同,都 不 得 在 代 码 中 嵌 套 使 用,否 则 硬 件 行 为 将 不 可 预 测。
- 成 对 使 用 的asc_lock和asc_unlock必 须 配 置 相 同 的mode,否 则 硬 件 行 为 将 不 可 预 测。
- 如 果 代 码 中 连 续 出 现 多 个pipe和mutex_id均 相 同 的 调 用,则 后 一 个asc_lock不 会 再 阻 塞 流 水 线 运 行。若 需 要 表 达 同 一 流 水 线 内 的 依 赖 关 系,必 须 使 用 接 口asc_sync_pipe。
调 用 示 例
C++
uint8_t mutex_id = 1;
asc_lock(PIPE_S, mutex_id);
asc_unlock(PIPE_S, mutex_id);