示例
下面给出简化版的流程代码片段,体现基准程序中的关键步骤与顺序(省略细节错误处理与平台初始化代码):
// --- 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);
// 清理
HixlCSClientUnregMem(client, client_mem_h);
HixlCSClientDestroy(client);父主题: HIXL CS接口说明