asc_lock
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
功能说明
该接口用于AI Core内部异步流水线之间的同步,可按需阻塞指定流水线的执行。
函数原型
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。
调用示例
uint8_t mutex_id = 1;
asc_lock(PIPE_S, mutex_id);
asc_unlock(PIPE_S, mutex_id);