* Rework barrier and event code

* Switch to inline asm
Этот коммит содержится в:
Wenkai Du
2023-05-31 13:36:51 -07:00
коммит произвёл GitHub
родитель 7519ecb476
Коммит 5a38ff192b
3 изменённых файлов: 5 добавлений и 6 удалений
+2
Просмотреть файл
@@ -29,6 +29,8 @@ ncclResult_t initChannel(struct ncclComm* comm, int channelId) {
ncclCommPushCudaFree(comm, channel->devRingUserRanks);
NCCLCHECK(ncclStrongStreamRelease(ncclCudaGraphNone(), &comm->deviceStream));
CUDACHECK(hipEventRecord(comm->deviceStream.scratchEvent, comm->deviceStream.cudaStream));
CUDACHECK(hipStreamWaitEvent(comm->deviceStream.cudaStream, comm->deviceStream.scratchEvent, 0));
for (int r=0; r < nPeers; ++r) {
for (int b=0; b < NCCL_MAX_CONNS; b++) {
+3 -4
Просмотреть файл
@@ -16,12 +16,11 @@
#define NCCL_SPINS_BEFORE_CHECK_ABORT 1000000
#define barrier_by_group() do { \
const int w = threadIdx.x/WARP_SIZE; \
const int wid = threadIdx.x%WARP_SIZE; \
__threadfence(); \
if (nthreads == NCCL_MAX_NTHREADS) { \
__syncthreads(); \
__asm__ __volatile__("s_waitcnt vmcnt(0) lgkmcnt(0)\ns_barrier\ns_waitcnt lgkmcnt(0)"); \
} else { \
const int w = threadIdx.x/WARP_SIZE; \
const int wid = threadIdx.x%WARP_SIZE; \
if (wid == 0) { \
barrier_next[w] += nthreads/WARP_SIZE; \
atomicAdd((unsigned long long *)barriers, 1); \
-2
Просмотреть файл
@@ -237,8 +237,6 @@ ncclResult_t ncclStrongStreamRelease(struct ncclCudaGraph graph, struct ncclStro
}
}
#endif
CUDACHECK(cudaEventRecord(ss->scratchEvent, ss->cudaStream));
CUDACHECK(cudaStreamWaitEvent(ss->cudaStream, ss->scratchEvent, 0));
return ncclSuccess;
}