已关闭
[Bug-Report|缺陷反馈]: conv3d_v2 算子 mssanitizer 检测到 PIPE 同步缺失导致 WAW/RAW hazard #3802
wanyukang创建于  7月3日关闭于  7月3日
wanyukang
wanyukang
7月3日 创建

问题描述

mssanitizer 检测到 conv3d_v2 算子存在两处 PIPE 同步缺失导致的 hazard:

  1. PIPE_MTE2 WAW(conv3d_v2 FP32/FP16 20 处):

    • 位置:conv3d_sub_api.h LoadChannelWiseL1 函数
    • 原因:bias 通道数未对齐 BLOCK_L0_N(16) 时,InitConstValue 先清零整个对齐 L1 块,随后 DataCopy 写入实际数据,两次 PIPE_MTE2 操作同一 L1 地址范围,缺少 PipeBarrier<PIPE_MTE2>()
  2. PIPE_V RAW(Conv3DV2_INT8 66 处):

    • 位置:quant_conv3d_common_func.h VecCompute::Compute 函数
    • 原因:Cast 将 dstLocal 转为 transLocal 后,TransFormat 通过 TransDataTo5HD 读取 transLocal,两次 PIPE_V 操作同一 UB,缺少 PipeBarrier<PIPE_V>()

环境信息

  • 硬件:910B3
  • CANN:9.1.0-beta.3
  • 算子:ops-nn custom_nn
  • 检测工具:mssanitizer(外层模式),memcheck + racecheck + synccheck

重现步骤

  1. 使用 --mssanitizer 编译 conv3d_v2 算子
  2. ATK 全量 180 用例:
    mssanitizer -t memcheck -t racecheck -t synccheck --log-level error -- \
      atk task -c aclnnConvolution.json -n nodes.yaml -p ./ -s 0 -e 180 -to 6000
    

预期结果

mssanitizer 全量检测 0 error。

日志

WAW hazard 典型输出:

Potential WAW hazard detected at UB:
  Write: conv3d_sub_api.h:56 (InitConstValue, PIPE_MTE2)
  Read:  conv3d_sub_api.h:61 (DataCopy, PIPE_MTE2)

RAW hazard 典型输出:

Potential RAW hazard detected at UB:
  Write: quant_conv3d_common_func.h:298 (Cast, PIPE_V)
  Read:  quant_conv3d_common_func.h:341 (TransDataTo5HD, PIPE_V)

备注

修复 PR:#6896

likedislike
wanyukangwanyukang
7月3日 添加了label:bug-report
wanyukang
wanyukang
7月3日 评论:

已提交修复 PR:#6896

likedislike
wanyukang
wanyukang
7月3日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
7月3日 将 wanyukang 设为负责人
CANN-robotCANN-robot成员
7月3日 关闭了 issue
wanyukangwanyukang
7月3日 关联了pull request:fix(conv3d_v2): fix MTE2 WAW and V pipe RAW hazards detected by mssanitizer
CANN-robotCANN-robot成员
7月6日 添加了label:resolved