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接口也采用上述环境变量配置方式使能多线程能力。
参数
参数名 |
类型 |
描述 |
输入/输出 |
|---|---|---|---|
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。
父主题: 内存管理函数