Open
[Documentation|文档反馈]: URMA odr=5 与 Fence 的保序语义在代码注释和文档中不一致 #114
luobqAdd on 12 days ago
12 days ago Added label: documentation
9 days ago Assign chen_xu0513 as responsible person
8 days ago Deleted associated pull request: update docs
chen_xu0513
7 days ago Comments:
7 days ago Comments:
问题已修复,纠正了src/aicore/hcomm/common/hcomm_inner_def.h中的注释说明,并更新了api文档,config配置说明已统一


Document Link(文档链接)
基于提交
f33ec7b5a73ed335e7a2ca89f4490818cced4ecf,相关文档与代码:Issues Section(问题文档片段)
1. odr=5 的执行序描述不一致
src/aicore/hcomm/common/hcomm_inner_def.h:41 将
odr=5注释为 strongly ordered:struct UrmaWqeEntry { uint32_t odr : 3; // ordering, request ordering strength (0=unordered, 5=strongly ordered) uint32_t fence : 1; // fence, 1=current WQE waits for all prior WQEs to complete uint32_t se : 1; // solicited event, 1=trigger remote event notification on completion uint32_t cqe : 1; // completion queue entry, 1=generate CQE on completion uint32_t inlineEn : 1; // inline enable, 1=data inlined in WQE instead of SGE reference同一文件的默认配置:
static constexpr UrmaWqeEntry URMA_DEFAULT_CFG = { .odr = 5, .fence = 1, .se = 0, .cqe = 1, .inlineEn = 0, }; static constexpr UrmaWqeEntry URMA_INLINE_CFG = { .odr = 5, .fence = 1, .se = 0, .cqe = 1, .inlineEn = 1, };但 docs/zh/api/aicore/hcomm/WriteValueNbi.md:38 对默认
URMA_INLINE_CFG的说明为:相关编码证据:src/aicpu/asccomm/resource/connection/udma_data_struct.h:50:
struct UdmaSqe { uint32_t sqeBbIdx : 16; uint32_t placeOdr : 2; uint32_t compOrder : 1; uint32_t fence : 1; uint32_t se : 1; uint32_t cqe : 1; uint32_t inlineEn : 1;src/aicpu/asccomm/resource/connection/ub_conn_lite.cc:28:
constexpr uint32_t UB_RELAX_ORDER = 0x1; // Relax Order表示当前SQE与后续Strong Order SQE有保序要求 constexpr uint32_t UB_STRONG_ORDER = 0x2; // Strong Order表示当前SQE有保序要求,该SQE不能超越前面的Relax Order SQEAICore 路径 src/aicore/hcomm/impl/platform_v310/hcomm_aiv_urma.h:59 将 odr 的三位直接填入 SQE flag:
sqeCtx->flag = (config.odr & 0x7U) | ((config.fence & 0x1U) << 3U) | ((config.se & 0x1U) << 4U) | ((config.cqe & 0x1U) << 5U) | ((config.inlineEn & 0x1U) << 6U) | (opCode == HcommUrmaOpCode::WRITE_WITH_REDUCE ? HCOMM_URMA_UDF_FLAG : 0U);结合上述位布局,推导
odr = placeOdr | (compOrder << 2),则5 (0b101)对应 Relax Order + CQE保序,6 (0b110)对应 Strong Order + CQE保序。这是基于仓内实现的推导,请维护者确认是否适用于该 AICore URMA 路径。2. Fence 等待范围描述不一致
src/aicore/hcomm/common/hcomm_inner_def.h:43:
uint32_t fence : 1; // fence, 1=current WQE waits for all prior WQEs to complete而 docs/zh/programming_model/execution_model.md:181:
两者分别描述为“所有前序 WQE”和“前序读或原子操作”,对前序 Write 是否在等待范围内的口径不同。
Existing Issues(存在的问题)
以上差异影响开发者判断后续事务与前序 Write/Read/Atomic 的依赖关系,以及仅等待末任务 CQE 是否足以确认整批完成。
docs/zh/guide/hcomm_usage.md:145 明确提出以下前提:
希望维护者澄清并统一相关注释及中英文文档:
odr各编码对应的执行序和完成序,特别是odr=5与odr=6。本 issue 反馈仓内说明不一致,尚未据此认定硬件行为或通信实现存在缺陷。