Hi everyone,
testResult_t BenchTime(struct threadArgs* args, ncclDataType_t type, ncclRedOp_t op, int root, int in_place) {
size_t count = args->nbytes / wordSize(type);
if (datacheck) {
// Initialize sendbuffs, recvbuffs and expected
TESTCHECK(args->collTest->initData(args, type, op, root, 99, in_place));
}
// Sync
TESTCHECK(startColl(args, type, op, root, in_place, 0));
TESTCHECK(completeColl(args));
Barrier(args);
#if CUDART_VERSION >= 11030
cudaGraph_t graphs[args->nGpus];
cudaGraphExec_t graphExec[args->nGpus];
if (cudaGraphLaunches >= 1) {
// Begin cuda graph capture
for (int i=0; i<args->nGpus; i++) {
// Thread local mdoe is needed for:
// - Multi-thread mode: where graph capture and instantiation can happen concurrently across threads
// - P2P pre-connect: when there is no warm-up, P2P pre-connect is done during graph capture.
// Since pre-connect calls cudaMalloc, we cannot use global capture mode
CUDACHECK(cudaStreamBeginCapture(args->streams[i], cudaStreamCaptureModeThreadLocal));
}
}
#endif
// Performance Benchmark
timer tim;
for (int iter = 0; iter < iters; iter++) {
if (agg_iters>1) NCCLCHECK(ncclGroupStart());
for (int aiter = 0; aiter < agg_iters; aiter++) {
TESTCHECK(startColl(args, type, op, root, in_place, iter*agg_iters+aiter));
}
if (agg_iters>1) NCCLCHECK(ncclGroupEnd());
}
I noticed that when I set -n 10 (10 iterations), the test uses 10 different buffers instead of reusing the same buffer across iterations. I initially expected the same buffer to be reused, but that's not what happens.
And look at the code here,
// Sync
TESTCHECK(startColl(args, type, op, root, in_place, 0));
TESTCHECK(completeColl(args));
I think this is actually a warm up for the first buffer, the left 9 buffer will not warm up.
I'd like to understand the design considerations behind this behavior. Any considerations?
Hi everyone,
I noticed that when I set
-n 10(10 iterations), the test uses 10 different buffers instead of reusing the same buffer across iterations. I initially expected the same buffer to be reused, but that's not what happens.And look at the code here,
I think this is actually a warm up for the first buffer, the left 9 buffer will not warm up.
I'd like to understand the design considerations behind this behavior. Any considerations?