鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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。