---
title: 基于KUPL实现
description: "KUPL的数据拷贝接口使能了SDMA数据搬运功能，通过封装SDMA驱动接口的方法，简化SDMA使用方法，降低学习成本。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/KunpengDeveloper/usermanual/topic_0000002535456078.html
sourcePath: /source/zh/kunpenghpcs/KunpengDeveloper/usermanual/topic_0000002535456078.html
indexId: 0ef285009211b0433e1170f6bfc1ae5781dec21f927bae8a0ff283cbffe5895478
---
# 基于KUPL实现

KUPL的数据拷贝接口使能了SDMA数据搬运功能，通过封装SDMA驱动接口的方法，简化SDMA使用方法，降低学习成本。

具体地，能够通过KUPL相关数据拷贝接口，使用SDMA进行数据拷贝。举例如下：

代码内容如下：
```
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "kupl.h"
int main()
{
int height = 2, width = 200;
int spitch = 300, dpitch = 400;
char *src = (char*)kupl_malloc(KUPL_MEM_DEFAULT, sizeof(char) * height * spitch);
char *dst = (char*)kupl_malloc(KUPL_MEM_DEFAULT, sizeof(char) * height * dpitch);
for (int i = 0; i < height * spitch; i++) {
src[i] = (char)i;
}
int ret = kupl_memcpy2d(dst, sizeof(char) * dpitch, src,
sizeof(char) * spitch, sizeof(char) * width, height);
assert(ret == KUPL_OK);
kupl_free(KUPL_MEM_DEFAULT, src);
kupl_free(KUPL_MEM_DEFAULT, dst);
return 0;
}
```


1、上述示例演示了使用KUPL数据拷贝接口进行二维内存拷贝的流程。

2、上述kupl_memcpy2d函数将src数组中的内容复制到dst数组，其中src位置的数据每取出width数据的偏移量为300，dst位置的数据每存储width数据的偏移量为400，拷贝数据的宽和高分别为200和2。

3、kupl_memcpy2d接口能够通过SDMA进行二维数据的同步拷贝；同理，可以通过kupl_memcpy、kupl_memcpy_async、kupl_memcpy2d_async等接口进行一维同步、一维异步、二维异步数据拷贝，接口的详细信息和使用方法可以参考鲲鹏社区的《KUPL开发指南》(https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_010.html)。
