Skip to content

Mutex(ISASI)

Mutex用于核内异步流水指令之间的同步控制,其功能类似于传统CPU中的锁机制。通过先锁定再释放指定流水来完成流水间的同步依赖,锁定/解锁指定流水对应Lock/Unlock接口。

  • Lock:根据MutexID获取Mutex,若Mutex已被锁定,将阻塞后续指定流水指令队列,直到当前流水的前序指令中对应MutexID的Mutex被Unlock
  • Unlock:直到当前流水的前序指令执行完成后,根据MutexID释放对应Mutex。

图 1 Lock/UnLock接口

每个锁有固定的一个MutexID,在不同编程范式中,该ID的获取以及释放方式不同:

相对于SetFlag/WaitFlag同步机制,使用Lock/Unlock接口有以下优势:

  • 内聚性更强,使用时与其它流水线解耦,可以简化反向同步,如图2所示,以PIPE_MTE2与PIPE_V之间同步为例。
  • 可以使用更多的同步信号量。

图 2 SetFlag/WaitFlag同步与Lock/Unlock同步代码差异

Mutex类定义如下:

C++
class Mutex {
template <pipe_t pipe>
static __aicore__ inline void Lock(MutexID id);
template <pipe_t pipe>
static __aicore__ inline void Unlock(MutexID id);
};

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区