HIXL CS 接口说明
【免费下载链接】hixlHIXL(Huawei Xfer Library)是一个灵活、高效的昇腾单边通信库,面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | x |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | x |
HixlStatus与返回码
接口返回码类型与常量。
typedef uint32_t HixlStatus; static const uint32_t HIXL_SUCCESS = 0U; static const uint32_t HIXL_PARAM_INVALID = 103900U; static const uint32_t HIXL_TIMEOUT = 103901U; static const uint32_t HIXL_FAILED = 503900U;具体错误码含义如下。
| 枚举值 | 含义 | 是否可恢复 | 解决办法 |
|---|---|---|---|
| HIXL_SUCCESS | 成功 | 无 | 不涉及。 |
| HIXL_PARAM_INVALID | 参数错误 | 是 | 基于日志排查错误原因。 |
| HIXL_TIMEOUT | 处理超时 | 否 | 保留现场,获取Host/Device日志,并备份。 |
| HIXL_FAILED | 通用失败 | 否 | 保留现场,获取Host/Device日志,并备份。 |
句柄类型
句柄类型定义。
typedef void *HixlServerHandle; typedef void *HixlClientHandle; typedef void *CompleteHandle; typedef void *MemHandle;结构体说明
以下是CS API中使用到的结构体定义。
HixlServerConfig
Server配置保留字段,用于未来扩展。
struct HixlServerConfig { uint8_t reserved[128] = {}; };HixlClientConfig
Client配置保留字段,用于未来扩展。
struct HixlClientConfig { uint8_t reserved[128] = {}; };HixlClientDesc
Client描述信息。
struct HixlClientDesc { const EndpointDesc *local_endpoint; const EndpointDesc *remote_endpoint; const char *server_ip; uint32_t server_port; uint8_t tc; uint8_t sl; uint8_t reserved[98] = {}; };字段说明:
| 字段 | 类型 | 描述 |
|---|---|---|
| local_endpoint | const EndpointDesc* | 本端Endpoint描述(定义见 https://gitcode.com/cann/hcomm/blob/master/include/hcomm_res_defs.h )。 |
| remote_endpoint | const EndpointDesc* | 远端Endpoint描述(定义见 https://gitcode.com/cann/hcomm/blob/master/include/hcomm_res_defs.h )。 |
| server_ip | const char* | 目标 server Host IP。 |
| server_port | uint32_t | 目标 server Host 端口。 |
| tc | uint8_t | RDMA网卡的traffic class。 |
| sl | uint8_t | RDMA网卡的service level。 |
| reserved | uint8_t[98] | HixlClientDesc配置保留字段,用于未来扩展,结构体总大小保持为128字节。 |
HixlServerDesc
Server 描述信息。
struct HixlServerDesc { const EndpointDesc *endpoint_list; const char *server_ip; uint32_t server_port; uint32_t endpoint_list_num; uint8_t reserved[104] = {}; };字段说明:
| 字段 | 类型 | 描述 |
|---|---|---|
| server_ip | const char* | 侦听 IP。 |
| server_port | uint32_t | 侦听端口。 |
| endpoint_list | const EndpointDesc* | Endpoint描述数组指针。Endpoint描述定义见 https://gitcode.com/cann/hcomm/blob/master/include/hcomm_res_defs.h |
| endpoint_list_num | uint32_t | Endpoint数量。 |
| reserved | uint8_t[104] | HixlServerDesc配置保留字段,用于未来扩展,结构体总大小保持为128字节。 |
HixlOneSideOpDesc
单向操作描述(用于批量put/get)。
struct HixlOneSideOpDesc { void *remote_buf; void *local_buf; uint64_t len; };字段说明:
| 字段 | 类型 | 描述 |
|---|---|---|
| remote_buf | void* | 远端(server)数据地址。 |
| local_buf | void* | 本端(client)数据地址。 |
| len | uint64_t | 传输长度(字节)。 |
Put 与 Get 对HixlOneSideOpDesc的语义:
- BatchPut(同步/异步):数据从
local_buf拷贝到remote_buf,长度为len。 - BatchGet(同步/异步):数据从
remote_buf拷贝到local_buf,长度为len。
枚举
异步任务完成状态定义:
enum HixlCompleteStatus { HIXL_COMPLETE_STATUS_WAITING, HIXL_COMPLETE_STATUS_COMPLETED, HIXL_COMPLETE_STATUS_TIMEOUT, HIXL_COMPLETE_STATUS_FAILED }; 说明: 其中HIXL_COMPLETE_STATUS_TIMEOUT和HIXL_COMPLETE_STATUS_FAILED当前为预留字段。接口说明
每个接口包含:函数功能、函数原型、参数说明、返回值、调用示例与约束说明。
HixlCSServerCreate
函数功能
创建并初始化Server实例。
函数原型
HixlStatus HixlCSServerCreate(const HixlServerDesc *server_desc, const HixlServerConfig *config, HixlServerHandle *server_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| server_desc | 输入 | Server 描述信息,包含侦听 IP/端口与端点列表。 |
| config | 输入 | server配置,预留配置,暂未使用。 |
| server_handle | 输出 | 返回创建的 HixlServerHandle。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败或错误码(见常量)。
约束说明
- 如果使用本地device的Endpoint,调用该接口前需要先调用“aclrtSetDevice”。
- 调用失败时server_handle不保证有效。
HixlCSServerRegMem
函数功能
Server注册共享内存供Client访问。
函数原型
HixlStatus HixlCSServerRegMem(HixlServerHandle server_handle, const char *mem_tag, const CommMem *mem, MemHandle *mem_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| server_handle | 输入 | Server 实例句柄。 |
| mem_tag | 输入 | 内存标签字符串,用于标识此内存,可选,可传入为NULL。 |
| mem | 输入 | 指向 CommMem,描述内存位置与大小(定义见 https://gitcode.com/cann/hcomm/blob/master/include/hcomm_res_defs.h )。 |
| mem_handle | 输出 | 返回的内存句柄,用于后续注销。 |
返回值
- HIXL_SUCCESS:注册成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
- 在client调用HixlCSClientConnect与本端建链之前需要完成所有本地内存的注册。
- 使用host RoCE网卡当前不支持注册“aclrtMallocHost”申请出来的内存,可使用malloc等方式。
- 注册Device内存使用“aclrtMalloc”进行申请。
HixlCSServerListen
函数功能
启动 Server 侦听,接受来自 Client 的连接。
函数原型
HixlStatus HixlCSServerListen(HixlServerHandle server_handle, uint32_t backlog);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| server_handle | 输入 | Server 实例句柄。 |
| backlog | 输入 | 连接队列最大长度。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
在client调用HixlCSClientConnect与本端建链之前需要完成侦听。
HixlCSServerUnregMem
函数功能
注销之前注册的内存。
函数原型
HixlStatus HixlCSServerUnregMem(HixlServerHandle server_handle, MemHandle mem_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| server_handle | 输入 | Server 实例句柄。 |
| mem_handle | 输入 | 需注销的内存句柄(HixlCSServerRegMem 返回)。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
确保远端不再访问该内存后,且与当前server建链的client均断链以后再注销。
HixlCSServerDestroy
函数功能
销毁 Server 实例并释放相关资源。
函数原型
HixlStatus HixlCSServerDestroy(HixlServerHandle server_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| server_handle | 输入 | Server 实例句柄。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
- 需要和HixlCSServerCreate配对使用。
- 建议在调用HixlCSServerDestroy前,链路进行断链以及对注册的内存进行解注册。
- Server需要等所有Client完成断链后调用该接口,如果Server提前退出,Client断链以及数据传输过程会发生报错。
- 当Client需要操作Server端地址进行远端读写,Server端需要等Client完成远端读写之后才调用该接口;否则会出现失败。
- 该接口不能和其他接口并发调用。
HixlCSClientCreate
函数功能
创建 Client 实例并初始化本端资源。
函数原型
HixlStatus HixlCSClientCreate(const HixlClientDesc *client_desc, const HixlClientConfig *config, HixlClientHandle *client_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_desc | 输入 | Client 描述,包含 server IP/port 与端点。 |
| config | 输入 | client配置,预留配置,暂未使用。 |
| client_handle | 输出 | 返回创建的客户端句柄。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
- 如果使用本地device的Endpoint,调用该接口前需要先调用“aclrtSetDevice”。
- 调用失败时
client_handle不保证有效。
HixlCSClientConnect
函数功能
发起与 Server 的同步建链(阻塞直到成功或超时)。
函数原型
HixlStatus HixlCSClientConnect(HixlClientHandle client_handle, uint32_t timeout_ms);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| timeout_ms | 输入 | 连接超时时间(毫秒)。 |
返回值
- HIXL_SUCCESS:连接成功
- HIXL_PARAM_INVALID:参数错误
- HIXL_TIMEOUT:连接超时
- 其他:失败
约束说明
- 调用当前接口与server建链前,需要完成所有本地内存的注册。
- 调用当前接口与server建链前,需要确保server已经处于侦听状态。
- 调用当前接口建链后,需要调用HixlCSClientGetRemoteMem接口,确保远端内存描述信息交换至本地。
HixlCSClientGetRemoteMem
函数功能
获取 Server 已注册的内存信息。
函数原型
HixlStatus HixlCSClientGetRemoteMem(HixlClientHandle client_handle, CommMem **remote_mem_list, char ***mem_tag_list, uint32_t *list_num, uint32_t timeout_ms);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| remote_mem_list | 输出 | 返回的CommMem数组指针,内存生命周期由接口内部管理。重复调用该接口,将释放上一次申请的内存,如有需要按需拷贝至本地内存(定义见 https://gitcode.com/cann/hcomm/blob/master/include/hcomm_res_defs.h)。 |
| mem_tag_list | 输出 | 字符串数组,对应每个CommMem的标签,内存生命周期由接口内部管理。重复调用该接口,将释放上一次申请的内存,如有需要按需拷贝至本地内存。 |
| list_num | 输出 | 返回的列表长度,内存生命周期由接口内部管理。重复调用该接口,将释放上一次申请的内存,如有需要按需拷贝至本地内存。 |
| timeout_ms | 输入 | 请求超时时间(毫秒)。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败或超时
约束说明
- 输出参数内存生命周期由接口内部管理。重复调用该接口,将释放上一次申请的内存,如有需要按需拷贝至本地内存。
- 调用HixlCSClientConnect接口后,需要调用当前接口,确保远端内存描述信息交换至本地。
HixlCSClientRegMem
函数功能
Client 注册本地内存。
函数原型
HixlStatus HixlCSClientRegMem(HixlClientHandle client_handle, const char *mem_tag, const CommMem *mem, MemHandle *mem_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| mem_tag | 输入 | 内存标签字符串。 |
| mem | 输入 | CommMem描述。 |
| mem_handle | 输出 | 返回的内存句柄。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
- 在调用HixlCSClientConnect与server端建链之前需要完成所有本地内存的注册。
- 使用host RoCE网卡当前不支持注册“aclrtMallocHost”申请出来的内存,可使用malloc等方式。
- 注册Device内存使用“aclrtMalloc”进行申请。
HixlCSClientUnregMem
函数功能
注销 Client 注册的内存。
函数原型
HixlStatus HixlCSClientUnregMem(HixlClientHandle client_handle, MemHandle mem_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| mem_handle | 输入 | 要注销的内存句柄。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
确保本地不再访问该内存后,且与server均断链以后再注销。
HixlCSClientBatchPutAsync
函数功能
异步批量向Server写多组数据。
函数原型
HixlStatus HixlCSClientBatchPutAsync(HixlClientHandle client_handle, uint32_t list_num, const HixlOneSideOpDesc *desc_list, CompleteHandle *complete_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| list_num | 输入 | 子任务条数,须大于 0;为 0 时返回HIXL_PARAM_INVALID。 |
| desc_list | 输入 | 指向HixlOneSideOpDesc数组,长度为list_num;list_num > 0时不可为 NULL。每项为local_buf → remote_buf,len为字节数。 |
| complete_handle | 输出 | 返回的完成句柄,用于用户异步查询任务状态,当查询成功后,将自动释放相关资源。不可为 NULL。 |
返回值
- HIXL_SUCCESS:任务提交成功(不代表完成)
- HIXL_PARAM_INVALID:参数错误
- 其他:提交失败
约束说明
最大支持4K个数据并发传输,下发任务后需及时调用HixlCSClientQueryCompleteStatus接口查询任务状态。
HixlCSClientBatchGetAsync
函数功能
异步批量从Server读多组数据到本地。
函数原型
HixlStatus HixlCSClientBatchGetAsync(HixlClientHandle client_handle, uint32_t list_num, const HixlOneSideOpDesc *desc_list, CompleteHandle *complete_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| list_num | 输入 | 子任务条数,须大于 0;为 0 时返回HIXL_PARAM_INVALID。 |
| desc_list | 输入 | 指向HixlOneSideOpDesc数组,长度为list_num;list_num > 0时不可为 NULL。每项为remote_buf → local_buf,len为字节数。 |
| complete_handle | 输出 | 返回的完成句柄,用于用户异步查询任务状态,当查询成功后,将自动释放相关资源。不可为 NULL。 |
返回值
- HIXL_SUCCESS:任务提交成功(不代表完成)
- HIXL_PARAM_INVALID:参数错误
- 其他:提交失败
约束说明
最大支持4K个数据并发传输,下发任务后需及时调用HixlCSClientQueryCompleteStatus接口查询任务状态。
HixlCSClientBatchPutSync
函数功能
同步批量向 Server 写入多组数据:在整批传输完成、超时或失败前阻塞当前线程,不返回CompleteHandle。
函数原型
HixlStatus HixlCSClientBatchPutSync(HixlClientHandle client_handle, uint32_t list_num, const HixlOneSideOpDesc *desc_list, uint32_t timeout_ms);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄,不可为 NULL。 |
| list_num | 输入 | 子任务条数,须大于 0;为 0 时返回HIXL_PARAM_INVALID。 |
| desc_list | 输入 | 长度为list_num的HixlOneSideOpDesc数组;list_num > 0时不可为 NULL。数据方向为local_buf(源)→ remote_buf(目标),len为每次传输的字节数。 |
| timeout_ms | 输入 | 整批任务的总等待超时(毫秒)。超时返回HIXL_TIMEOUT。Host 端实现为轮询等待完成;Device 端为流同步超时预算。 |
返回值
- HIXL_SUCCESS:整批传输已完成
- HIXL_PARAM_INVALID:参数错误(如
list_num == 0、desc_list非法、client_handle为 NULL 等) - HIXL_TIMEOUT:在
timeout_ms内未完成 - 其他:传输或内部错误(见日志与
HixlStatus码)
约束说明
- 调用前须已完成与 Server 的建链(如
HixlCSClientConnect),且desc_list中的地址须为已注册/已通过HixlCSClientGetRemoteMem等途径获得的合法单边访问地址。 - 与异步接口相同,建议关注最大并发子任务规模等限制(参见异步批量接口说明)。
HixlCSClientBatchGetSync
函数功能
同步批量从 Server 读取多组数据到本地:在整批传输完成、超时或失败前阻塞当前线程,不返回CompleteHandle。
函数原型
HixlStatus HixlCSClientBatchGetSync(HixlClientHandle client_handle, uint32_t list_num, const HixlOneSideOpDesc *desc_list, uint32_t timeout_ms);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄,不可为 NULL。 |
| list_num | 输入 | 子任务条数,须大于 0;为 0 时返回HIXL_PARAM_INVALID。 |
| desc_list | 输入 | 长度为list_num的HixlOneSideOpDesc数组;list_num > 0时不可为 NULL。数据方向为remote_buf(源)→ local_buf(目标),len为每次传输的字节数。 |
| timeout_ms | 输入 | 整批任务的总等待超时(毫秒)。超时返回HIXL_TIMEOUT。Host 端实现为轮询等待完成;Device 端为流同步超时预算。 |
返回值
- HIXL_SUCCESS:整批传输已完成
- HIXL_PARAM_INVALID:参数错误(如
list_num == 0、desc_list非法、client_handle为 NULL 等) - HIXL_TIMEOUT:在
timeout_ms内未完成 - 其他:传输或内部错误(见日志与
HixlStatus码)
约束说明
- 调用前须已完成与 Server 的建链(如
HixlCSClientConnect),且desc_list中的地址须为已注册/已通过HixlCSClientGetRemoteMem等途径获得的合法单边访问地址。 - 与异步接口相同,建议关注最大并发子任务规模等限制(参见异步批量接口说明)。
HixlCSClientQueryCompleteStatus
函数功能
查询异步批量任务的完成状态。
函数原型
HixlStatus HixlCSClientQueryCompleteStatus(HixlClientHandle client_handle, CompleteHandle complete_handle, HixlCompleteStatus *complete_status);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
| complete_handle | 输入 | 要查询的任务句柄。 |
| complete_status | 输出 | 返回任务状态枚举(见HixlCompleteStatus)。 |
返回值
- HIXL_SUCCESS:查询成功,传输状态需要根据complete_status确定。
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
- 最大支持4K个数据并发传输,下发任务后需及时调用HixlCSClientQueryCompleteStatus接口查询任务状态。
- 查询传输任务状态为HIXL_COMPLETE_STATUS_COMPLETED后,相关资源将自动释放,不支持使用相同的complete_handle再次查询。
- 查询传输任务状态为HIXL_COMPLETE_STATUS_WAITING,需用户自行判断当前传输任务是否已经发生超时,如果超时可重建传输传输链路进行重试,并销毁当前异常链路。
HixlCSClientDestroy
函数功能
销毁 Client 实例并释放资源。
函数原型
HixlStatus HixlCSClientDestroy(HixlClientHandle client_handle);参数说明
| 参数名 | 输入/输出 | 描述 |
|---|---|---|
| client_handle | 输入 | 客户端句柄。 |
返回值
- HIXL_SUCCESS:成功
- HIXL_PARAM_INVALID:参数错误
- 其他:失败
约束说明
- 需要和HixlCSClientCreate配对使用。
- 建议在调用HixlCSClientDestroy前,链路进行断链以及对注册的内存进行解注册。
- 该接口不能和其他接口并发调用。
使用建议
- 环境准备:调用
aclrtSetDevice(device_id)。 - 准备 Endpoint 描述(
EndpointDesc)。 - Server 流程:
- 构造
HixlServerDesc与HixlServerConfig。 - 调用
HixlCSServerCreate创建HixlServerHandle。 - 为要被远端访问的内存分配并准备
CommMem(Host/Device 内存),调用HixlCSServerRegMem注册并保存返回的MemHandle。 - 调用
HixlCSServerListen开始侦听连接。 - 等待 Client 建链并发起数据传输。
- 传输结束后调用
HixlCSServerUnregMem注销内存并HixlCSServerDestroy销毁服务。
- Client 流程:
- 构造
HixlClientDesc与HixlClientConfig。 - 调用
HixlCSClientCreate创建HixlClientHandle。 - 准备本端
CommMem并通过HixlCSClientRegMem注册(保存MemHandle)。 - 调用
HixlCSClientConnect建链(阻塞或等待超时),确保Server处于侦听状态。 - 调用
HixlCSClientGetRemoteMem获取 Server 已注册的内存,从而获取远端地址用于后续操作。 - 构造一组
HixlOneSideOpDesc(local/remote 地址、长度),任选其一:- 调用
HixlCSClientBatchPutAsync/HixlCSClientBatchGetAsync提交异步批量操作,并轮询HixlCSClientQueryCompleteStatus直到状态为HIXL_COMPLETE_STATUS_COMPLETED; - 或调用
HixlCSClientBatchPutSync/HixlCSClientBatchGetSync同步完成整批传输(需传入整批超时时间timeout_ms)。
- 调用
- 完成后按需读取/校验内存内容,最后
HixlCSClientUnregMem注销本端内存并HixlCSClientDestroy。
示例
下面给出简化版的流程代码片段,体现基准程序中的关键步骤与顺序(省略细节错误处理与平台初始化代码):
// --- Server (伪代码) --- HixlServerHandle server = NULL; HixlServerDesc sdesc = {"0.0.0.0", 12345, &endpoint, 1}; HixlCSServerCreate(&sdesc, NULL, &server); // 分配并初始化 server 内存(Host 或 Device) CommMem server_mem = { .addr = server_buf, .size = size, .type = COMM_MEM_TYPE_DEVICE }; MemHandle server_mem_h = NULL; HixlCSServerRegMem(server, "server_mem", &server_mem, &server_mem_h); HixlCSServerListen(server, 1024); // 等待 client 发起并完成传输(可用 TCP 信令同步) // 注销并销毁 HixlCSServerUnregMem(server, server_mem_h); HixlCSServerDestroy(server); // --- Client (伪代码) --- HixlClientHandle client = NULL; HixlClientDesc cdesc = {"server.ip", 12345, &local_ep, &remote_ep}; HixlCSClientCreate(&cdesc, NULL, &client); // 分配并注册本地内存 CommMem client_mem = { .addr = client_buf, .size = size, .type = COMM_MEM_TYPE_DEVICE }; MemHandle client_mem_h = NULL; HixlCSClientRegMem(client, "client_mem", &client_mem, &client_mem_h); // 建链 HixlCSClientConnect(client, 5000); // 获取远端内存地址(通过 mem_tag) CommMem *remote_list = NULL; char **tags = NULL; uint32_t num = 0; HixlCSClientGetRemoteMem(client, &remote_list, &tags, &num, 2000); // 构造批量操作描述,示例:分块循环 varying block size std::vector<HixlOneSideOpDesc> ops = ...; // 填写 local/remote addr 与 len // 方式一:异步 + 轮询完成 CompleteHandle ch; HixlCSClientBatchPutAsync(client, ops.size(), ops.data(), &ch); HixlCompleteStatus st; do { HixlCSClientQueryCompleteStatus(client, ch, &st); std::this_thread::sleep_for(std::chrono::milliseconds(1)); } while (st == HIXL_COMPLETE_STATUS_WAITING); // 方式二:同步(整批在 timeout 内完成则返回 HIXL_SUCCESS) // HixlCSClientBatchPutSync(client, ops.size(), ops.data(), 5000); // 清理 HixlCSClientUnregMem(client, client_mem_h); HixlCSClientDestroy(client);【免费下载链接】hixlHIXL(Huawei Xfer Library)是一个灵活、高效的昇腾单边通信库,面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考