0 Related work

diff from 1 to 7内,ceAlltoall使用了对称内存来完成数据的传输。需要参考这里的同步机制来实现VCCL机内不hang。

1 具体实现

1.1 nccl内可参考部分

diff from 1 to 7 2025-10-13 19.50.43.excalidraw

⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’

Excalidraw Data

Text Elements

batchOpsParams

dst

void** dsts; void** srcs; size_t* sizes; size_t numOps; bool intraBatchSync;

ncclCeInitBatchOpsParams(…)

每个变量calloc成nRanks的平方

dstRank == commrank

dstRank != commrank

srcPtr = mySendBuff + dstRank * chunkBytes

dstPtr = myRecvBuff + selfRankrank * chunkBytes

batchOpsParams

dst

dsts[batchOpsParams.numOps]=dstPtr srcs[batchOpsParams.numOps]=srcPtr sizes[batchOpsParams.numOps]=chunkBytes numOps++

chunkBytes = argsnElts * argseltSize

for r+1 in range (nRanks):

batchOpsParams

dst

dsts[batchOpsParams.numOps]=peerRecvBuff srcs[batchOpsParams.numOps]=srcPtr sizes[batchOpsParams.numOps]=chunkBytes numOps++

peerRecvBuff = commdevrStatelsaFlatBase + commdevrStatebigSize * dstRank + argsrecvWinbigOffset + argsrecvWinuserPtr

cudaMemcpyBatchAsync

batchParams

dst

operation

waitValue

operation address value/value64 flags alias

writeValue

operation address value/value64 flags alias

flushRemoteWrites

memoryBarrier

Data

ncclMemOpSync

nvls??

MCSync

UCSync

rank0

传递和等待的值是ceSeqNum++

multicast object

Host

Device

copy(H2D)

rank0

rank1

copy(H2D)

rank0

rank1

mcDstPtr

t1

t2

t2

rank1

rank0

rank1

mcDstPtr

t1

t2

t2

rank0

Host

Device

rank0

rank1

rank1

waitValue

waitValue

cuStreamBatchMemOp

stream

这里是cuStreamWaitValue32的batch版 一个rank可以一下放多个wait op

cuStreamBatchMemOp

stream

这里是cuStreamWaitValue32的batch版 一个rank可以一下放多个wait op

copyAsync

copyAsync

NCCL

change to complete

change to complete

cuStreamBatchMemOp

cuStreamBatchMemOp

rank0

Host

Device

rank0

same as above

rank1

rank2

rank0

t1

t2

t2时刻: symTeamObtain

Link to original

1.2 vccl方案

1.2.1 Use symmetric

Symmetric Memory P2p Design 2025-10-15 19.19.33.excalidraw

⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’

Excalidraw Data

Text Elements

Host

Device

rank0

t1

rank0

rank1

cudaMemcpyAsync

copyH2D

Host

Device

rank1

rank1

waitValue op

wait

rank1 stream

rank0 stream

Host

Device

rank0

t2

copyH2D

rank0

rank1

Host

Device

rank1

rank1

waitValue op

use symmetric mem

Link to original

2 排期

准备cuda13.0开发环境和测试环境一天,开发大约1-2天,debug2天。总时间4-5天。