---
title: HcommLocalCopyOnThread
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/commopdev/hcclopdevapi_07_0080.html
sourcePath: /source/zh/canncommercial/900/programug/commopdev/hcclopdevapi_07_0080.html
indexId: a8547396b8e1b57de478020b7cba75442b6180e43af42b65271c704de44a46c575
---
# HcommLocalCopyOnThread

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | ☓ |
| Atlas 推理系列产品 | ☓ |
| Atlas 训练系列产品 | ☓ |


针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，仅支持Atlas 800T A2 训练服务器、Atlas 900 A2 PoD 集群基础单元、Atlas 200T A2 Box16 异构子框。


#### 功能说明

提供本地内存拷贝功能，将src指向的长度为len的内存数据，拷贝到dst所指向的相同长度的内存中。


#### 函数原型

```
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 侧调用该接口。


#### 调用示例

```
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);
```
