HcclBroadcast
Applicability
Product |
Supported |
|---|---|
Atlas 350 Accelerator Card |
√ |
√ |
|
√ |
|
☓ |
|
☓ |
|
√ |
For
Function
Broadcasts the data of the root rank in the communicator to other ranks.

Prototype
1 | HcclResult HcclBroadcast(void *buf, uint64_t count, HcclDataType dataType, uint32_t root, HcclComm comm, aclrtStream stream) |
Parameters
Parameter |
Input/Output |
Description |
|---|---|---|
buf |
Input/Output |
Data buffer, used as a send buffer for root ranks, while a receive buffer for non-root ranks. |
count |
Input |
Number of data records to perform Broadcast operation. For example, if only one int32 data record is involved, then count=1. |
dataType |
Input |
Data type of the Broadcast operation, which is of the HcclDataType type. Atlas 350 Accelerator Card: The supported data types are int8, uint8, int16, uint16, int32, uint32, int64, uint64, float8-e5m2, float8-e4m3, float8-e8m0, hifloat8, float16, float32, float64, and bfp16. |
root |
Input |
ID of the root rank. |
comm |
Input |
Communicator where the operation is performed. |
stream |
Input |
Stream of the rank. |
Returns
HcclResult: HCCL_SUCCESS on success, or else failure.
Constraints
- The ranks must have the same count, dataType, and root.
- There can be only one root rank globally.
Call Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // Allocate device memory for collective communication. void *buf = nullptr; // Data buffer, used as a send buffer for root ranks, while a receive buffer for non-root ranks. uint64_t count = 8; // Number of data elements involved in the broadcast operation. size_t mallocSize = count * sizeof(float); aclrtMalloc(&buf, mallocSize, ACL_MEM_MALLOC_HUGE_ONLY); // Construct the input data on the root rank. if (deviceId == rootRank) { aclrtMemcpy(buf, mallocSize, hostBuf, mallocSize, ACL_MEMCPY_HOST_TO_DEVICE); } // Initialize the communicator. uint32_t rankSize = 8; HcclComm hcclComm; HcclCommInitRootInfo(rankSize, &rootInfo, deviceId, &hcclComm); // Create a task flow. aclrtStream stream; aclrtCreateStream(&stream); // Perform the broadcast operation to broadcast the data of the root rank in the communicator to other ranks. HcclBroadcast(buf, count, HCCL_DATA_TYPE_FP32, rootRank, hcclComm, stream); // Wait until the collective communication task in the task flow is complete. aclrtSynchronizeStream(stream); // Free resources. aclrtFree(sendBuf); // Free the device memory. aclrtFree(recvBuf); // Free the device memory. aclrtDestroyStream(stream); // Destroy the task flow. HcclCommDestroy(hcclComm); // Destroy the communicator. |