[发明专利]一种字符串的复制方法、装置及可读存储介质及计算设备在审
申请号: | 202110162279.3 | 申请日: | 2021-02-05 |
公开(公告)号: | CN112506591A | 公开(公告)日: | 2021-03-16 |
发明(设计)人: | 冉攀峰 | 申请(专利权)人: | 北京鼎石纵横科技有限公司 |
主分类号: | G06F9/448 | 分类号: | G06F9/448;G06F9/38 |
代理公司: | 北京鼎承知识产权代理有限公司 11551 | 代理人: | 柯宏达;夏华栋 |
地址: | 100086 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 字符串 复制 方法 装置 可读 存储 介质 计算 设备 | ||
本发明实施例提供了一种字符串的复制方法、装置、可读存储介质及计算设备,方法不重复复制原字符串,而是采用上一次执行memcpy后形成的较长中间结果来完成本次复制操作,充分发挥SIMD的性能优势,提高复制效率,包括:获取用于复制的源字符串,以及二进制表示的复制次数;将源字符串写入目标字符串的地址空间;从二进制表示的复制次数的最低位到置1的最高位的右边1位,依次获取每个位的数值,每获取一个位的数值之后,将目标字符串的从头开始的源字符串长度的指定倍数的内容复制至目标字符串的末尾;以及,如果获取的位的数值为1,再次将目标字符串的从头开始的源字符串长度的指定倍数的内容复制至目标字符串的末尾;输出第二字符串。
技术领域
本发明涉及计算机数据处理技术领域,尤其涉及一种字符串的复制方法、装置、可读存储介质及计算设备。
背景技术
字符串函数repeat是一个在通用编程语言(Java, C++)和关系型数据系统(MySQL, PostgreSQL, DorisDB, ClickHouse)常用的基本函数,其用于将一个给定的字符串与自身做若干次拼接,产生一个新的字符串。
以C语言为例,repeat函数实现为:
void repeat(
const char* s,
size_t n,
size_t repeat_times,
char*new_s
);
其中,s表示被复制的字符串,n表示字符串长度,repeat_times表示复制次数,假如我们给定字符串s为“foobar”,n为6,repeat_times为3,则该函数的计算结果new_s的长度为18,内容为“foobarfoobarfoobar”。
现有的算法,一般先分配指定大小的内存buffer,然后重复使用memcpy函数复制给定的字符串若干次。以memcpy的调用次数为基本运算,则算法的时间复杂度为O(n)。然而当给定字符串长度较小时(如字符串长度 8字节),在X86_64平台上,采用SIMD(SingleInstruction Multiple Data, 单指令多数据流)指令实现的memcpy退化为普通的数据传输指令(MOVE),无法发挥出现代处理器的超标量和多发射的计算能力。
具体地,现有的repeat函数实现调用memcpy的次数为repeat_times次,每次都复制长度为n的s,追加到新字符串new_s的末尾。新字符串的长度为repeat_times乘以n。该算法的对长度较小的字符串(比如长度<16)不友好,因为此时memcpy的复制的字符串的长度不满足SIMD指令所需处理字长(SSE2字长为16字节,AVX为32字节, AVX512为64字节),会退化到按字节或者按双字节复制的慢速版本上来。比如执行repeat(“a”,1,1024, new_s)时,调用memcpy的次数为1024, 而执行repeat(“aaaaaaaaaaaaaaaa”, 16, 64, new_s)则调用memcpy的次数为64,后者因为SIMD指令优化,性能是前者5倍以上。
因此,现有repeat函数的实现存在如下两个缺点:1、算法的时间复杂度为O(N);2、无法发挥出SIMD指令性能。
发明内容
为此,本发明提供了一种字符串的复制方法、装置、可读存储介质及计算设备,以力图解决或者至少缓解上面存在的至少一个问题。
根据本发明实施例的一个方面,提供了一种字符串的复制方法,包括:
获取用于复制的源字符串,以及二进制表示的复制次数;
初始化目标字符串的地址空间,将所述源字符串写入所述目标字符串的地址空间的开始位置,设置一个初始值为0的迭代计数器,设置一个初始值为目标字符串的开始位置和所述源字符串的长度相加所获得的位置的位置变量;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京鼎石纵横科技有限公司,未经北京鼎石纵横科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110162279.3/2.html,转载请声明来源钻瓜专利网。