[发明专利]一种大整数乘法Karatsuba算法的并行实现方法有效
申请号: | 201510996000.6 | 申请日: | 2015-12-25 |
公开(公告)号: | CN105653239B | 公开(公告)日: | 2018-06-22 |
发明(设计)人: | 蒋丽娟;杜胜;杨超;许永超;刘芳芳;钟伟;赵玉文;申超 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F7/53 | 分类号: | G06F7/53 |
代理公司: | 北京科迪生专利代理有限责任公司 11251 | 代理人: | 成金玉;孟卜娟 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种大整数乘法Karatsuba算法的并行实现方法,基于64位无符号长整型整数操作,通过巧妙的公式转换技巧,指针运算以及存储方式,以解决部分积存储与计算的相关性问题,通过OpenMP多线程编程,采用section任务分担策略将算法进行并行化,从而开启8个线程在递归程序的第一层并行求取8个部分积,每个section负责一个部分积的计算任务,待部分积均求取完毕后进行串行归并,从而并行化Karatsuba算法,提高算法效率。 | ||
搜索关键词: | 算法 大整数乘法 并行实现 并行化 存储方式 公式转换 任务分担 算法效率 指针运算 第一层 多线程 递归 归并 线程 整型 编程 并行 存储 | ||
【主权项】:
1.一种大整数乘法Karatsuba算法的并行实现方法,其特征在于包括如下步骤:(1)申请长度为N的64位无符号长整型临时数组tmp[N],数组长度N=3*w+s+2,其中w为乘数与被乘数的位数,其不一定被3整除,且s=w‑2*(w/3);(2)根据公式(9)r=u2*v2*R4n+[u1*v2+u2*v1]*R3n+[u1*v1+u0*v2+u2*v0]*R2n+[(u1+u0)*(v1+v0)‑u1*v1‑u0*v0]Rn+u0*v0 (9)其中,u0、u1、u2分别为乘数u的低n位,中n位,高s位,v0、v1、v2分别为被乘数v的低n位,中n位,高s位,n为位数,R为基;在递归算法第一层,计算部分积u0*v0、u1*v1、u2*v2、(u1+u0)*(v1+v0)、u0*v2、u2*v0、u1*v2以及u2*v1,且在求此8个部分积时,仍然调用原始串行递归Karatsuba算法,u0*v0、u1*v1、u2*v2的计算结果分别存储在rp指向数组的低2*n,中2*n位,以及高2*s位,(u1+u0)*(v1+v0)、u0*v2、u2*v0、u1*v2以及u2*v1的计算结果由低到高连续存储在步骤(1)申请的临时数组tmp中,且其相对于临时数组tmp起始地址的偏移分别为0,2*n+2,2*n+2+n+s,2*n+2+2*n+2*s,2*n+2+3*n+3*s,其中rp为最终存储乘数与被乘数乘积结果的数组指针,n=w/3;在递归算法第一层计算8个部分积u0*v0、u1*v1、u2*v2、(u1+u0)*(v1+v0)、u0*v2、u2*v0、u1*v2以及u2*v1时,采用OpenMP并行编程section并行策略进行并行化,开启8个计算线程并行计算这8个部分积,每个线程执行一个部分积的计算过程;(3)由步骤(2)所述得到的8个部分积分别存储在数组rp以及临时数组tmp中,根据公式(9)将存储在数组rp以及临时数组tmp中的部分积进行大整数加减归并运算,并将最终结果存储在数组rp中。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201510996000.6/,转载请声明来源钻瓜专利网。