HcommLocalCopyOnThread
产品支持情况
产品 |
是否支持 |
|---|---|
Atlas 350 加速卡 |
√ |
√ |
|
√ |
|
☓ |
|
☓ |
|
☓ |
针对
功能说明
提供本地内存拷贝功能,将src指向的长度为len的内存数据,拷贝到dst所指向的相同长度的内存中。
函数原型
1 | int32_t HcommLocalCopyOnThread(ThreadHandle thread, void *dst, const void *src, uint64_t len) |
参数说明
参数名 |
输入/输出 |
描述 |
|---|---|---|
thread |
输入 |
通信线程句柄,为通过HcclThreadAcquire接口获取到的threads。 ThreadHandle的类型的定义请参见ThreadHandle。 |
dst |
输出 |
目的内存地址,Device内存。 |
src |
输入 |
源内存地址,Device内存。 |
len |
输入 |
数据长度(字节)。 |
返回值
int32_t:接口成功返回0,其他失败。
约束说明
dst、src内存是申请的device内存。
在 Atlas 350 加速卡 上,仅支持 AICPU_TS 模式下、在 Device 侧调用该接口。
调用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | HcclComm comm; CommEngine engine = COMM_ENGINE_CPU_TS; aclrtStream stream; aclrtCreateStream(&stream); ThreadHandle thread; HcclResult result = HcclThreadAcquireWithStream(comm, engine, stream, 2, &thread); // 申请device内存 uint64_t memSize = 256; s32 policy = static_cast<int>(ACL_MEM_TYPE_HIGH_BAND_WIDTH) | static_cast<int>(ACL_MEM_MALLOC_HUGE_FIRST); aclrtMallocAttrValue moduleIdValue; moduleIdValue.moduleId = HCCL; aclrtMallocAttribute attrs{.attr = ACL_RT_MEM_ATTR_MODULE_ID, .value = moduleIdValue}; aclrtMallocConfig cfg{.attrs = &attrs, .numAttrs = 1}; void* inputMem; void* outputMem; aclrtMallocWithCfg(&inputMem, memSize, static_cast<aclrtMemMallocPolicy>(policy), &cfg); aclrtMallocWithCfg(&outputMem, memSize, static_cast<aclrtMemMallocPolicy>(policy), &cfg); // 执行 D2D 拷贝 HcommLocalCopyOnThread(thread, outputMem, inputMem, memSize); |
在 Atlas 350 加速卡 上,该函数需要编译到 Device 侧使用:
HcclComm comm; CommEngine engine = COMM_ENGINE_AICPU_TS; void *cclBufferAddr = nullptr; uint64_t cclBufferSize = 0; HcclGetHcclBuffer(comm, &cclBufferAddr, &cclBufferSize); ThreadHandle thread; HcclThreadAcquire(comm, engine, 1, 1, &thread); // 其余资源申请 // 拷贝参数并 Launch Kernel // Device 侧算法编排 uint64_t len = 256; void *src = param.userIn; void *dst = param.cclBuf; // 执行 D2D 拷贝 HcommLocalCopyOnThread(thread, dst, src, len);
父主题: 本地操作