asc_sync_intra_wait
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
功能说明
block内同步指令,与asc_sync_intra_arrive配合使用,是block内不同Core的流水线同步指令,用于向每个Core的同步寄存器发送同步信号。每个sync_id对应VECCORE与CUBECORE中的一个初始值为0的计数器。asc_sync_intra_arrive指令后其他CORE对应的计数器增加1;执行asc_sync_intra_wait时如果对应的计数器数值为0则阻塞不执行;如果对应的计数器大于0,则计数器减一,同时后续指令开始执行。
函数原型
```cpp
__aicore__ inline void asc_sync_intra_wait(pipe_t pipe, uint8_t sync_id)
__aicore__ inline void asc_sync_intra_wait(pipe_t pipe, uint64_t sync_id)
```
参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| pipe | 输入 | 该指令的执行流水线。 |
| sync_id | 输入 | 事件标号。 |
返回值说明
无
流水类型
PIPE_S
约束说明
- 需要保证每一个ID的4位计数器不会溢出,否则会出现异常。
- 需要保证相同的ID只会被一个流水线控制。
- 每个ID对应一个4位计数器,特定CORE的同步ID计数器可通过其他CORE发起的asc_sync_intra_arrive递增;也可通过本身发起的asc_sync_intra_wait递减。
- 三个CORE的ID映射规则如下:
- ID为0~15的VECCORE0的asc_sync_intra_arrive指令会被映射到CUBECORE的0~15的ID。
- ID为0~15的VECCORE1的asc_sync_intra_arrive指令会被映射到CUBECORE的16~31的ID。
- ID为0~15的CUBECORE的asc_sync_intra_arrive指令会被映射到VECCORE0的0~15的ID。
- ID为16~31的CUBECORE的asc_sync_intra_arrive指令会被映射到VECCORE1的0~15的ID。
调用示例
//设置同步指令事件标号为1
uint64_t sync_id = 1;
asc_sync_intra_arrive(PIPE_S, sync_id);
asc_sync_intra_wait(PIPE_S, sync_id);