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


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


14 天前 issue状态由 进行中 改变为 已完成
14 天前 关闭了 issue
14 天前 issue状态由 已完成 改变为 进行中
14 天前 重新打开了 issue
5 天前 issue状态由 进行中 改变为 已完成
5 天前 关闭了 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更新的同步轮次状态。如果传入不同的存储空间,接口之间无法共享完整状态,可能导致执行顺序错误或程序卡死。建议在三个接口页面中使用一致的文字说明该组合使用约束,保证任意一个接口页面都可以独立提供完整信息。