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

kupl_memcpy

内存拷贝,将src位置的内存拷贝到dst位置。

接口定义

int kupl_memcpy(void *dst, const void *src, size_t count);

  • 当前kupl memcpy支持的最大拷贝长度为UINT32_MAX,即count值不超过UINT32_MAX。
  • count 需要小于 src 和 dst 所指向内存的真实大小。

环境变量

KUPL通过环境变量KUPL_MEMCPY_MT_THRESHOLD与KUPL_SDMA_MEMCPY_THRESHOLD来确认多线程memcpy能力的包大小阈值以及sdma memcpy能力的包大小阈值。多线程memcpy阈值默认为512KB,sdma memcpy阈值默认为2MB。

kupl memcpy共实现3种memcpy方法:单线程glibc memcpy方法、sdma memcpy方法及多线程memcpy方法;当环境中使能sdma时,通过KUPL_SDMA_MEMCPY_THRESHOLD阈值选取memcpy方法,即拷贝的数据包长小于阈值时,进行glibc memcpy,否则进行sdma memcpy;当环境中没有sdma时,通过KUPL_MEMCPY_MT_THRESHOLD阈值选取memcpy方法,即拷贝的数据包长小于阈值时,进行glibc memcpy,否则进行多线程memcpy。

用户可以通过配置KUPL_MEMCPY_MT_THRESHOLD与KUPL_SDMA_MEMCPY_THRESHOLD来设置多线程memcpysdma memcpy的阈值;kupl_memcpy2d接口也采用上述环境变量配置方式控制memcpy方法的选取

参数

表1 参数定义

参数名

类型

描述

输入/输出

dst

void *

指向存储复制内容的目标内存位置的指针

输入/输出

src

const void *

指向要复制的源内存位置的指针

输入

count

size_t

需要复制的内存大小

输入

返回值

  • 成功:返回KUPL_OK
  • 失败:返回KUPL_ERROR

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h> 
#include <stdlib.h>
#include <assert.h>
#include "kupl.h" 
   
int main() 
{ 
         int len = 1024; 
         char *src = (char *)kupl_malloc(len);
         char *dest = (char *)kupl_malloc(len);
         for (int i = 0; i < len / sizeof(char); i++) {
             src[i] = i ;
             dest[i] = 0;
         }
         int ret = kupl_memcpy(dest, src, len);
         assert(ret == KUPL_OK);
         kupl_free(src);
         kupl_free(dest); 
         return 0; 
}
  • 上述示例演示了内存拷贝的流程。
  • 上述kupl_memcpy函数将将src数组中的内容复制到dest数组,其中复制的内存大小为len。