已关闭
[Documentation|文档反馈]:软件仿真的核间同步接口参数含义及组合使用约束说明不完整 #1847
GRJ_XIDUO创建于 10月5日关闭于 14 天前
10月5日 添加了label:documentation
10月5日 将 GRJ_XIDUO 设为负责人
10月5日 修改了issue 的描述
10月5日 修改了issue 的描述
29 天前 关联了pull request:[docs] 补全核间同步接口(IBSet/IBWait/InitDetermineComputeWorkspace/WaitPreBlock/NotifyNextBlock)的工作空间与参数说明
29 天前 关联了pull request:[docs] 补全核间同步接口(IBSet/IBWait/InitDetermineComputeWorkspace/WaitPreBlock/NotifyNextBlock)的工作空间与参数说明
GRJ_XIDUO
29 天前 评论:
29 天前 评论:
您好,感谢反馈文档问题。
已确认上述资料问题都需修改描述,预计于2026年10月9日前完成修复。


27 天前 删除了关联的pull request:修正核间同步软件同步接口资料说明
27 天前 关联了pull request:修正核间同步软件同步接口资料说明
GRJ_XIDUO
22 天前 评论:
22 天前 评论:
您好,修复问题的PR已合入:
https://gitcode.com/cann/asc-devkit/pull/6590


22 天前 issue状态由 进行中 改变为 已完成
22 天前 关闭了 issue
22 天前 issue状态由 已完成 改变为 进行中
22 天前 重新打开了 issue
14 天前 issue状态由 进行中 改变为 已完成
14 天前 关闭了 issue
Document Link(文档链接)
Issues Section(问题文档片段)
IBSet和IBWait
参数说明中将两个工作空间笼统描述为公共缓存:
blockIdx和eventID的说明为:约束说明中仅简单给出:
InitDetermineComputeWorkspace
参数说明和初始化约束为:
WaitPreBlock和NotifyNextBlock
参数说明将
gmWorkspace和ubWorkspace统一描述为临时空间,约束中仅要求预先调用初始化接口:资料没有说明三个接口传入的
gmWorkspace和ubWorkspace之间必须保持怎样的对应关系。Existing Issues(存在的问题)
1.
gmWorkspace和ubWorkspace的用途不明确五个接口对工作空间使用“公共缓存”或“临时空间”等笼统且不统一的表述,未说明其存储位置和具体作用:
IBSet和IBWait的gmWorkspace位于Global Memory,由多个AIV共享,用于存储核间同步标志;ubWorkspace位于当前AIV的Unified Buffer,用于搬入、读取、修改同步标志,并在需要时将修改结果写回gmWorkspace。gmWorkspace用于保存多个AIV共享的核间顺序执行状态;ubWorkspace除暂存从Global Memory搬入或待写回的数据外,还保存当前AIV的同步轮次状态。现有描述无法让开发者判断两块空间是否由各AIV共享、其中保存什么数据,以及接口对数据执行了读取还是写入操作。
2.
IBSet和IBWait的blockIdx含义不准确资料将
blockIdx描述为“等待核的idx号”,容易被理解为调用IBWait的消费者索引。根据接口的同步标志寻址及样例用法,该参数实际表示同步标志对应的逻辑AIV索引,即被等待核(生产者、调用IBSet的核)的逻辑AIV索引;配对的IBSet和IBWait必须传入相同的blockIdx。此外,合法索引范围由算子调用时设置的逻辑AI Core核数
numBlocks和AIV配比决定,并不等于“实际参与本次同步的核数”。例如,使用__mix__(1, 2)修饰核函数且numBlocks为4时,逻辑AIV索引范围为[0, 7];即使本次同步只使用逻辑AIV 0和1,参数的合法范围仍不会缩小为[0, 1]。3.
eventID容易与SetFlag/WaitFlag的硬件事件ID混淆IBSet和IBWait的形参名称同样为eventID,但它表示用于软件同步标志寻址的逻辑事件编号,与blockIdx共同区分同一对生产者和消费者之间的不同同步事件,不是SetFlag/WaitFlag硬件指令使用的核内流水同步事件ID。因此,SetFlag/WaitFlag中硬件事件ID的0-7取值限制不能直接套用到该参数。现有资料既未说明两者的本质区别,也未说明该参数应使用非负整数并建议从0开始连续编号,容易导致开发者错误限制取值或误解同步机制。
4. 未充分说明AIC侧调用行为
在相关分离架构上,
IBSet、IBWait、InitDetermineComputeWorkspace、WaitPreBlock和NotifyNextBlock的同步逻辑仅在AIV侧生效。在AIC中调用时,接口会直接结束,不会设置或等待同步标志,也不会初始化、通知或执行核间同步。原版
IBSet和IBWait资料只写“分离模式下,使用该接口进行两个核间的同步时,仅对AIV核生效”;原版WaitPreBlock和NotifyNextBlock资料将“仅对AIV核生效”与两个接口之间的指令限制写在同一条约束中;原版InitDetermineComputeWorkspace资料未说明AIC侧调用行为。五个页面均未明确说明AIC调用会直接结束以及各接口不会产生的具体效果,开发者可能误以为调用仍会建立AIC与AIV之间的同步关系。5.
IBSet和IBWait对gmWorkspace初始值的要求不够醒目gmWorkspace中的核间同步标志必须在首次同步前初始化为0,但原约束位于列表末尾,且未说明违反约束的后果:IBWait可能将残留值误判为生产者已经完成操作,从而提前结束等待并破坏同步顺序。IBSet和IBWait可能均无法满足退出条件而持续等待,导致程序卡死。该要求会直接影响功能正确性,建议同时在
gmWorkspace参数说明和约束说明开头强调。6. InitDetermineComputeWorkspace对两个入参的初始化要求说明不完整
原版资料仅说明“该接口输入参数
gmWorkspace缓存的值不需要初始化为0”,没有说明调用者是否需要预先初始化ubWorkspace,也没有说明接口内部会对两个入参执行什么初始化操作。根据实现,调用者不需要预先初始化gmWorkspace和ubWorkspace;接口会将gmWorkspace中的核间同步状态初始化为0,并将ubWorkspace中的同步轮次状态初始化为1。资料需要补充这两项实际行为,避免开发者自行初始化ubWorkspace或误判其中状态值的含义。7. 三个顺序执行接口缺少共享同一组存储空间的约束
InitDetermineComputeWorkspace、WaitPreBlock和NotifyNextBlock组合使用时:gmWorkspace必须指向同一块Global Memory。ubWorkspace必须指向当前AIV上的同一块Unified Buffer,通常应向三个接口传入同一组变量。WaitPreBlock需要从gmWorkspace读取初始化接口初始化或NotifyNextBlock写入的核间同步状态;NotifyNextBlock需要从ubWorkspace读取初始化接口设置或前一次NotifyNextBlock更新的同步轮次状态。如果传入不同的存储空间,接口之间无法共享完整状态,可能导致执行顺序错误或程序卡死。建议在三个接口页面中使用一致的文字说明该组合使用约束,保证任意一个接口页面都可以独立提供完整信息。