| fix(udma): align RaInit with RDMA to coexist with HCCL (Fix #271)
Co-authored-by: suqwe<sujianjia@huawei.com>
# message auto-generated for no-merge-commit merge:
!372 merge fix/issue-271-udma-rainit-coexist into master
fix(udma): align RaInit with RDMA to coexist with HCCL (Fix #271)
Created-by: suqwe
Commit-by: suqwe
Merged-by: cann-robot
Description: ## 现象
同一进程内同时使用 UDMA 与 HCCL 时,UDMA 的 RaInit 会失败,因为底层 rainit 在同一进程内不允许被调用多于一次:UDMA 的 RaInit 与 HCCL 各自都会调用一次。
详见 issue #271。
## 修复
参照 RdmaTransportManager::RaInit(src/host/transport/device_rdma/device_rdma_transport_manager.cpp:369)中已经验证可用的写法,对 UdmaTransportManager::RaInit 做对齐:
- RaInit 调用前先 sleep_for(3s) 让 HCCL 的初始化先落地,规避并发竞争;
- RaInit 返回非 0 时不再返回 false,改为打 WARN 日志、再 sleep_for(3s)、置 raInitialized_ = true、return true,理由是此时多半是 HCCL 已经把 RA 初始化好了,UDMA 直接复用即可。
这是与 RDMA 路径完全一致的退让策略,不引入新行为。
## 变更点
- src/host/transport/device_udma/device_udma_transport_manager.cpp
- 新增 <chrono> / <thread> 头文件;
- 在 RaInit 中加入 pre-call 与 post-failure 两次 sleep_for(WAIT_TIME);
- 失败分支改为 WARN + 置位 + 返回 true,与 RDMA 一致。
## 验证
- cmake --build build --target shmem:PASS。
Fix #271
See merge request: cann/shmem!372 | 6 天前 |