barret reduction原理详解及硬件优化

news2024/10/6 22:29:17

背景介绍

        约减算法,通常应用在硬件领域,因为模运算mod是一个除法运算,在硬件中实现速度会比乘法慢的多,并且还会占用大量资源,因此需要想办法用乘法及其它简单运算来替代模运算。模约减算法可以利用乘法、加法和移位等操作实现大数的取模,规避了模运算中的除法,常见方法有蒙哥马利模约减,barret模约减等,本篇文章介绍barret 模约减算法原理。

barret reduction

        约减就是用简单运算来规避除法运算,以便于硬件实现,以A mod q为例,如果要计算A对q取模的结果使用barret reduction算法应该怎么做?

        先规定A mod q,则称A为模数,q为基。

        假设A的位宽是w_{1},q的位宽是w_{2},对于硬件实现来说需要预计算出两个常数

\begin{cases} & \ q_1=\frac{A}{2^{w_{2}}} \\ & \ H=\frac{2^{w_{1}+1}}{q} \end{cases}

        \small q_1\small H在进行预计算的时候,都需要对计算结果进行取下整,进而\small q_1\small H满足如下不等式:

\begin{cases} & \ \ \ \frac{A}{2^{w_{2}}}-1 <q_1\leqslant \frac{A}{2^{w_{2}}} \\ & \ \frac{2^{w_{1}+1}}{q}-1<H\leqslant \frac{2^{w_{1}+1}}{q} \end{cases}

        令\small q_2 =q_1\times H,则有如下不等式成立:

\small q_2=\frac{A}{2^{w_{2}}} \times\frac{2^{w_{1}+1}}{q}

\small \frac{2^{w_{1}-w_{2}+1}A}{q}-\frac{A}{2^{w_{2}}}-\frac{2^{w_{1}+1}}{q}+1<q_2\leqslant \frac{2^{w_{1}-w_{2}+1}A}{q}

        令\small q_3=q_2 / 2^{w_{1}-w_{2}+1,即对上面\small q_2不等式,两边同时除以\small 2^{w_{1}-w_{2}+1,得到:

\small \frac{A}{q}-\frac{A}{2^{w_{1}}+1}-\frac{2^{w_{2}}}{q}+\frac{1}{2^{w_{1}-w_{2}+1}}<q_3\leqslant \frac{A}{q}

        由于A的位宽是w_{1},q的位宽是w_{2},所以A和q满足如下不等式:

\begin{cases} & \frac{A}{2^{w_{1}+1}} \leqslant1 \\ & \ \ \frac{2^{w_2}}{q} \leqslant2 \end{cases}

        把A和q所满足的不等式,带入q_3不等式中,得到:

\small \frac{A}{q}-3<q_3\leqslant \frac{A}{q}

        所以两边同时乘以q得到:

A-3q<q_3\times q\leqslant A

        因此得到模运算可以化简为:

A\ mod\ q=(A-q_{3}\times q)\ mod\ q

        又由于A-q_{3}\times q是在A-3q和A之间的,所以它对q取模,只需要判断它在[0,q)、[q,2q)、[2q,3q)的哪个区间,若A-q_{3}\times q落在[q,2q)区间,则:

(A-q_{3}\times q)\ mod\ q=A-q_{3}\times q-q

         以上,完成了barret模约减,同样的,该模约减算法可以应用在模乘领域,即实现barret模乘。而相对于模乘,AB mod q,可以直接把AB的乘积看作是上面公式推导的A,然后再进行模乘。

barret模约减计算流程大体如下图所示:

硬件实现

        看完模约减公式推导过程,肯定有人会疑问:

\begin{cases} & \ q_1=\frac{A}{2^{w_{2}}} \\ & \ H=\frac{2^{w_{1}+1}}{q} \end{cases}

        先前预计算了两个常数,我后面的约减推导全都是依赖于这两个常数。先来看H,为了将多项式系数约束在基的范围内,进而能够实现密码学领域中的一些同态加密算法,选取的基q,通常是定值,因此H的计算量很少可以直接预计算并存储到RAM中,哪怕我A的取值范围是1-200bit,在基q确定的情况下我最多也只需要预计算200个H的值。

        选取基q确定的情况下H好计算,但A是输入变量,有任意种可能,那么q_1该怎么预计算?

        事实上q_1不需要预计算,因为q_1是A除以2的幂次,在硬件中,除以2的幂次可以通过移位操作来实现,至于q_1计算需要对结果向下取整,只需要对A进行移位操作即可。例如

7/4=7>>2=3'b111 >>2=3'b001=1

downfloor(7/4) = downfloor(1.75)=2

        q_1计算对结果向下取整,可以直接用A移位来替代。

        综上,\small q_1的值和\small H的值我们都可以轻易得到了,并且不怎么消耗计算资源,也没有多少计算delay,并且后面\small q_3的计算也是除以2的次幂,也可以转化为移位操作,因此barret模约减主要的计算量在于:

\small \begin{cases} &q_2=q_1\times H=\frac{A}{2^{w_{2}}} \times\frac{2^{w_{1}+1}}{q} \\ & A-q_3\times q \end{cases}

        主要计算量在于上面的两个乘法,q2 = q1*H,和q3*q的计算。

硬件优化

        在之前已经推导出barret模约减主要计算量在两个乘法,q2 = q1*H,和q3*q的计算。

        对于硬件实现来说,第二个计算可以进行优化,因为A-q3*q之后还要对其的范围进行判断,若落在[q,2q)范围,则A mod q = A-q3*q-q,事实上我们关心其落在那个范围,并不需要比较所有bit位,q的位宽为\small w_2,我们只需要比较低\small w_2+2位的大小就可以判断其落在哪个范围,甚至对于q3*q也可以通过取q3的低\small w_2位的数据和q进行乘运算,再取运算结果的低\small w_2+2位进行比较,从而确定范围。

        因此在硬件实现上,利用barret模约减,成功将除法化简为了两个乘法和一(两)个加法计算。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么评价2023年第十三届MathorCup高校数学建模挑战赛?

文章目录赛题思路选题建议1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; 选题建议 首先要注意&#xff0c;A、B题为研究生组可选题目&#xff0c;A…

还在用 if else 做参数校验?快来学习高级参数校验吧

文章目录一、前言二、自定义校验2.1 定义 GenderArrayValuable 接口2.2 定义性别 GenderEnum 枚举类2.3 自定义 GenderCheck 自定义约束注解2.4 自定义约束的校验器 GenderValidator2.5 定义 UserUpdateGenderDTO2.6 定义一个对外访问接口2.7 请求接口 进行验证三、总结一、前言…

从C出发 17 --- 函数调用

从表面上来看&#xff0c;函数就是一个代码片段&#xff0c;只不过说这个代码片段可以反复利用&#xff0c;通过调用的方式反复利用&#xff0c;通过函数调用&#xff0c;我们可以将参数传到函数所对应的代码片段里面&#xff0c;然后代码片段去处理这些参数&#xff0c;得到一…

Linux下Samba服务器的安装与配置(简单实用)

为了可以实现Linux与windows之间实现文件的共享&#xff0c;方便文件可以直接修改&#xff0c;而不是像以前需要拷贝文件再进行修改&#xff0c;samba的诞生是为了实现现在的这些需求。我们知道Linux之间可以使用NFS服务器来实现文件的共享&#xff0c;samba的诞生就是为了使wi…

Spring Cloud Security

Spring Cloud Security Spring Cloud Security用于构建微服务的安全应用程序和服务&#xff0c;它可以轻松实现微服务系统架构下的统一安全认证与授权。 Spring Cloud Security 有以下组件。 spring-cloud-security&#xff1a;为Zuul、Feign、Oauth 2.0 的Resource Serve…

ChatGPT5是否会影响人类的发展和工作?

目录前言ChatGPT5是什么ChatGPT5 的潜在影响挑战与风险总结前言 ChatGPT的普及也带来了大量的讨论&#xff0c;关于它是否会影响人类的发展和工作。本文将讨论 ChatGPT5 如何可能改变人类的工作和发展&#xff0c;以及潜在的利弊和挑战。在话题开始之前&#xff0c;让我们先从…

QxOrm的使用-数据操作--增删改查

文章目录QxOrm的使用-数据操作使用QxOrm对数据库进行增删改查新增数据删除数据修改数据查询数据QxOrm的使用-数据操作 上一篇我们讲了QxOrm的基本的数据映射操作&#xff0c;这里面再补充一点东西 数据类型映射 Qt/C类型数据库类型boolSMALLINTqx_boolSMALLINTshortSMALLINT…

【谷粒商城之整合阿里云OSS对象存储】

本笔记内容为尚硅谷谷粒商城整合阿里云OSS对象存储部分 目录 一 、简介 二、云存储开通与使用 1、开通阿里云对象存储服务 2、创建bucket 3、创建子用户&#xff08;获取密钥访问OSS服务器&#xff09; 给该子账户添加权限 4、阿里云对象存储上传方式 三、整合 1、…

BUUCTF--Web篇详细wp

BUUCTF--Web篇详细wp[极客大挑战 2019]EasySQL[极客大挑战 2019]Havefun[HCTF 2018]WarmUp[ACTF2020 新生赛]Include[ACTF2020 新生赛]Exec[强网杯 2019]随便注[GXYCTF2019]Ping Ping Ping[SUCTF 2019]EasySQL[极客大挑战 2019]Secret File[极客大挑战 2019]LoveSQL[极客大挑战…

MySQL 分布式数据库实现:无需修改代码,轻松实现分布式能力

这个项目做什么 ShardingSphere-Proxy&#xff0c;可以让用户像使用原生数据库一样使用 Apache ShardingSphere。 了解一项技术的开始&#xff0c;一般从官网开始。先来看一看官网对 ShardingSphere-Proxy 的定义是什么样的&#xff1a; 定位为透明化的数据库代理端&#xff…

异配图神经网络——Graph Transformer Networks

一.论文概述 作者提出了Graph Transformer Network (GTN)用来在异配图&#xff08;heterogeneous graph&#xff09;上学习节点表示。通过Graph Transformer层&#xff0c;模型能将异构图转换为由meta-path定义的多个新图&#xff0c;这些meta-paths具有任意的边类型和长度&am…

运行Spring Boot项目时[ java: 错误: 不支持发行版本 17 ]

项目场景&#xff1a; 使用IDEA的Spring Initializr构建的Spring boot项目在构建完成后运行出错 问题描述&#xff1a; 用Spring Initializr创建了Spring Boot 项目后&#xff0c;运行时报错&#xff1a; “错误:java: 错误: 不支持发行版本 17”根据错误信息得知&#xff…

Vue学习笔记(5. 计算属性,监视器(侦听器))

1. 计算属性&#xff08;computed&#xff09; (1) get方式 初期显示 改变值后&#xff08;hello -> hello1&#xff09;计算属性allStr跟随变更 (2) get set方式 页面初期显示 改变值&#xff08;hello -> hello1&#xff09;计算属性的get会监控到变更&#xff0c;使…

国产SSD、内存卷哭国外大厂,三星宣布减产涨价在路上了

PC 圈有一句话是这么说的&#xff1a;论价格屠夫还得看国产品牌&#xff01; 可不是嘛&#xff0c;国产长鑫、长江算是彻底将全球存储芯片市场搅局者这一「骂名」坐实了&#xff01; 不说特别早期&#xff0c;前几年吧&#xff0c;普通单条 8G DDR4 内存都能卖到六七百元&…

C++ 红黑树

1.红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因…

D. Many Perfect Squares

题目链接&#xff1a;Problem - D - Codeforces 题意&#xff1a;给你一个数组&#xff0c;大小不超过50个。 问你让他们全部加上一个x&#xff0c;构造出来最多能够有多少个完全平方数。 思路&#xff1a; 先对数组排个序&#xff0c;首先它最少一定是有一个的&#xff0c…

Git配置SSH步骤

一、git 配置 &#xff08;1&#xff09;打开 git 命令窗口 &#xff08;2&#xff09;配置用户名&#xff08;填自己的姓名&#xff09; git config --global user.name “linjiaxiaozhu” &#xff08;3&#xff09;配置用户邮箱&#xff08;填自己的邮箱&#xff09; git…

电脑录屏的视频保存在哪里?您可以这样查看

案例&#xff1a;电脑录屏之后保存到哪里去了&#xff1f; “前几天&#xff0c;根据网络上的录屏教程试着录制了一下我的电脑屏幕&#xff0c;录制完成之后却找不到录制的视频。有没有小伙伴知道电脑录屏的视频保存在哪里&#xff1f;怎样才能快速找到&#xff1f;” 在现代…

pandas数据聚合和重组

介绍pandas数据聚合和重组的相关知识&#xff0c;仅供参考。 目录 1GroupBy技术 1.1简介 1.2对分组进行迭代 1.3选取一个或一组列 1.4通过字典或Series进行分组 1.5利用函数进行分组 2数据聚合 2.1简介 2.1面向列的多函数应用 2.2以‘无索引’的方式返回聚合数据 1G…

Faster R-CNN

目录 1. Fast R-CNN的不足 2. Faster R-CNN 3. RPN(Region Proposal Network) 3.1 anchor 3.2 RPN 网络 3.3 RPN 网络的损失 4. Faster R-CNN 损失 5. Faster R-CNN 训练 6. 对比 1. Fast R-CNN的不足 Fast R-CNN 的算法流程 Fast R-CNN网络运行速度慢的最主要原因&a…