---
title: kpccl_memcpy2D
description: "二维内存拷贝，将src位置的二维内存拷贝到dst位置。"
url: https://www.hikunpeng.com/document/detail/zh/hpchistory/hpckit/develop2400/KunoengHPCKit_developer_051.html
sourcePath: /source/zh/hpchistory/hpckit/develop2400/KunoengHPCKit_developer_051.html
indexId: 69db0f62ec3d5626f2eac4d743842822b8620efbd8285640bdcb271e0403871373
---
# kpccl_memcpy2D

二维内存拷贝，将src位置的二维内存拷贝到dst位置。

#### 接口定义

int kpccl_memcpy2D(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height);


#### 环境变量

kpccl通过环境变量KPCCL_MEMCPY_MT_ENABLE来控制kpccl_memcpy2D接口是否开启多线程memcpy能力，该环境变量默认为0表示不开启；当该环境变量设置成1开启多线程memcpy能力后，可以通过配置KPCCL_MEMCPY_MT_THRESHOLD来确认多线程memcpy能力使能的包大小阈值，该阈值默认为512KB；kpccl_memcpy接口也采用上述环境变量配置方式使能多线程能力。


#### 参数


**表1 参数定义**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| dst | void \* | 指向存储复制内容的目标内存位置的指针 | 输入/输出 |
| dpitch | size\_t | 目标内存的间距，即每存储width数据的偏移量 | 输入 |
| src | const void \* | 指向要复制的源内存位置的指针 | 输入 |
| spitch | size\_t | 源内存的间距，即每取出width数据的偏移量 | 输入 |
| width | size\_t | 需要拷贝的内存的宽 | 输入 |
| height | size\_t | 需要拷贝的内存的高 | 输入 |


#### 返回值

- 成功：返回KPCCL_OK
- 失败：返回KPCCL_ERROR


#### 示例

```
#include <stdio.h>
#include <stdlib.h>
#include "kpccl.h"
int main()
{
int len = 65536;
double *src = (double *)malloc(len);
double *dest = (double *)malloc(len);
for (int i = 0; i < len / sizeof(double); i++) {
src[i] = i ;
dest[i] = 0;
}
int height = 2, width = 200;
int spitch = 300, dpitch = 400;
kpccl_memcpy2D
(dest, dpitch, src, spitch, width, height);
free(src);
free(dest);
return 0;
}
```

- 上述示例演示了二维内存拷贝的流程。
- 上述kpccl_memcpy2D函数将将src数组中的内容复制到dest数组，其中src位置的数据每取出width数据的偏移量为300。
- dest位置的数据每存储width数据的偏移量为400。
- 拷贝数据的宽和高分别为200和2。
