下载
中文
注册

使用说明

当同一个CubeResGroupHandle中的两个AIV任务之间存在依赖关系时,可以使用GroupBarrier控制同步。假设一组AIV A做完任务x以后,另外一组AIV B才可以开始后续业务,称AIV A组为Arrive组,AIV B组为Wait组。

基于GroupBarrier的组同步使用步骤:

  1. 创建GroupBarrier。
  2. 调用Arrive。
  3. 调用Wait。
  1. 创建GroupBarrier。
    1
    2
    // 用户自行管理并对这部分workspace清零
    AscendC::GroupBarrier<AscendC::PipeMode::MTE3_MODE> barA(workspace, 3, 6);  //创建GroupBarrier
    
  2. 调用Arrive。
    1
    2
    3
    4
    5
    6
    // 用户自行管理并清零这部分workspace, 3个AIV需要进行Arrive, 6个AIV需要Wait。
    AscendC::GroupBarrier<AscendC::PipeMode::MTE3_MODE> barA(workspace, 3, 6);  //创建GroupBarrier
    if (AscendC::GetBlockIdx() < 3) {
      //各种Vector计算逻辑,用户自行实现
      barA.Arrive(AscendC::GetBlockIdx());
    }
    
  3. 调用Wait。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AscendC::GroupBarrier<AscendC::PipeMode::MTE3_MODE> barA(workspace, 3, 6);  //创建GroupBarrier
    auto id = AscendC::GetBlockIdx();
    if (id < 3) {
      //各种Vector计算逻辑,用户自行实现
      barA.Arrive(id);
    } else(id >= 3 && id < 6){
      barA.Wait(id - 3);
      // 各种Vector计算逻辑,用户自行实现
    }