# Group Calls¶

Group primitives define the behavior of the current thread to avoid blocking. They can therefore be used from multiple threads independently.

## ncclGroupStart¶

ncclResult_t ncclGroupStart()

Start a group call.

All subsequent calls to NCCL may not block due to inter-CPU synchronization.

## ncclGroupEnd¶

ncclResult_t ncclGroupEnd()

End a group call.

Returns when all operations since ncclGroupStart have been processed. This means communication primitives have been enqueued to the provided streams, but are not necessary complete.

When used with the ncclCommInitRank call, the ncclGroupEnd call waits for all communicators to be initialized.

Note: There is a maximum of 2048 NCCL operations that can be inserted between the ncclGroupStart and ncclGroupEnd calls. If this limit is exceeded, then a warning message will be emitted and the NCCL operation will return a failure code.