翻译论文:Beating Floating Point at its Own Game: Posit Arithmetic(一)

仅作记录学习使用,侵删
原文Beating Floating Point at its Own Game: Posit Arithmetic
参考翻译Posit: 替换IEE754的新方式 | SIGARCH

摘要

IEEE标准754浮点数(浮点数)的直接接点替换

Posit的优势

· 不需要区间算术或可变大小操作数
· 如果答案不精确,它们就会四舍五入
· 与浮点数相比,它们提供了引人注目的优势:更大的动态范围、更高的精度、更好的闭包、跨系统的逐位相同的结果、更简单的硬件和更简单的异常处理
· 永远不会溢出到无穷大或逐步下溢到零
· NaN表示一个动作而不是一个位模式
· 位置处理单元比IEEE浮点FPU需要更少的电路
· 由于较低的功耗和较小的硅占用,芯片支持的每秒定位操作POPS可以显著高于使用类似硬件资源的失败
· 对于GPU加速器和深度学习处理器,它可以在每瓦特和每美元做更多的计算,又能提供卓越的答案质量

与float对比

低精度的posits提供了一个比试图容忍答案质量下降的“近似计算”更好的解决方案。高精度posits比相同大小的浮点提供更正确的小数;在某些情况下,32位posits可以安全地取代64位浮点。换句话说,posits在他们浮点自己的领域击败它。

关键词

计算机算术,节能计算,浮点数,posits,线性包,线性代数,神经网络,unum计算,有效算术

背景:Type I and Type II Unums

unum算术框架有几种形式。原始的“类型I型”unum是IEEE 754标准浮点格式的超集;它在分数的末尾使用一个“ubit”来表示实数是精确的浮点还是位于相邻浮点之间的开放区间。符号、指数和分数位字段的定义来自IEEE 754,而指数和分数字段的长度会自动变化,从一个位到用户设置的某个最大值。类型I的unums提供了一种表示区间算法的紧凑方法,但它们的可变长度需要额外的管理。它们可以通过显式的舍入函数复制IEEE浮点行为。

“类型II”unum放弃了与IEEE浮点体的兼容性,允许基于投影实数的干净的数学设计。关键的观察结果是,有符号整数优雅地映射到射影实数,其正数与负数的包络线相同,顺序相同。
5位II型单元的结构如图1所示:
在这里插入图片描述
每个unum有n位,“u格”用 2^(n−3)−1实数xi填充圆的右上象限。 (不一定是合理的)
左上象限是xi的负数,一个围绕垂直轴的反射
圆的下半部分的上半部分是数字的倒数,这是一个围绕水平轴的反射,使得×和÷的操作就像+和−一样对称
与类型I一样,以1结束的类型II unum(ubit)表示相邻精确点之间的开放间隔,也是以0结束的unum。
类型II的unums有许多理想的数学属性,但对于大多数操作都依赖于表查找。如果它们有n位精度,那么(在最坏的情况下)2个参数函数有2^2n个表项,尽管对称性和其他技巧通常会将其减少到更易于管理的大小。对于当前的内存技术,表的大小将这种超快格式的可伸缩性限制在大约20位或更少。II型单元也不太容易进行融合操作。这些缺点促使人们寻找一种格式,这种格式将保留II型的许多优点,但要“硬件友好”,也就是说,使用现有的类浮动逻辑可计算。

Posits and Valids

我们对比了两种涉及实数的计算美学:
· 不严格,但便宜,快速和对于一套已建立的应用程序“足够好”
· 严格的和数学上的,甚至以更多的执行时间和存储空间为代价

第一个美学长期以来一直通过浮动运算来解决,即允许舍入误差,而第二个美学则通过区间运算来解决。

但是,如果我们总是在每次操作后使用“猜测”函数进行舍入,我们最好使用最后一个位作为另一个重要的分数位,而不是ubit。

II型整数的硬件友好版本放宽了其中一条规则:互反只遵循0、±∞和整数幂为2的完美反射规则。这让我们可以以一种保持有限数浮动的方式填充超格,因为它们都是m⋅2^k的形式,其中k和m是整数。没有开放的时间间隔。

有效的是一对大小的假定,每个以ubit结束。它们用于应用程序需要间隔类型边界的严谨性的地方,例如在调试数值算法时。有效算法比传统的区间算法更强大,也不太容易快速扩展,使边界过于悲观的。然而,它们并不是本文的重点。

Posit格式(重点内容)

这是具有es指数位的n位posit表示的结构(图2)
在这里插入图片描述
符号位是我们所习惯的方法:0表示正数,1表示负数。如果为负值,则在状态位、指数和分数之前取2进制的补码。(比IEEE单精度浮点数多了状态码)
在这里插入图片描述
我们把这些领先的位称为数字的状态。二进制字符串以一行中全部0或全部1位开始,当下一位相反时终止,或者达到字符串的结尾。对于相同的位r,机制位以琥珀色编码,对于终止运行的相反位¯r,如果有的话。设m是运行中相同位的数量;如果这些位是0,那么k=−m;如果它们是1,那么k = m−1。大多数处理器可以在硬件中“找到前1”或“找到前0”,所以状态位的解码逻辑是很容易获得的。
该机制表示使用useedk的比例因子,其中使用了useed= 2^ 2es。表2显示了useedk的示例。
在这里插入图片描述
下一个位(颜色编码为蓝色)是指数e,被认为是一个无符号整数。没有像浮点数一样存在偏差。
它们代表2e的缩放。
可以有es指数位,这取决于状态的右边剩下多少位。
这是一种表达锥形精度的紧凑方法;接近1量级的数字比极大或极小的数字具有更高的精度,这在计算中很不常见。
如果在状态和指数位之后还有任何位,它们表示分数f,就像分数1一样。浮动中的f,隐藏位总是1。没有隐藏位为0的次正态数,因为有浮点数。
刚才描述的系统是填充u型晶格的自然结果。
从一个简单的3位posit开始;为了清晰起见,图3只显示了投影实数的右半部分。到目前为止,图3遵循了第II类规则。只有两个定位异常值:0(所有0位)和±∞(1后跟所有0位),并且它们的位字符串含义不遵循位置符号。对于图3中的其他假设,位采用如上所述的颜色编码。请注意,图3中的正值正好用于该状态所表示的k值的幂。
在这里插入图片描述
通过附加位来提高定位精度,当附加一个0位时,值将保持在圆上的位置。附加一个1位会在圆圈上的两个posit之间创建一个新的值。
我们应该给每个中间值分配什么值?设maxpos是最大的正值,minpos是由位串定义的环上的最小正值。在图3中,使用了maxpos和minpos。插值规则如下:在最大值和±∞之间,新值是最大值;在0和×之间,新值是小值/使用(新状态位)。在现有的值x = 2m和y = 2n之间,其中m和n相差大于1,新的值是它们的几何平均值,√x⋅y=2(m+n)/2(新的指数位)。否则,新值位于它旁边现有的x和y值之间,也就是说,它表示算术平均值(x+y)/2(新的分数位)。

例如,图4显示了es=2时从3位到5位位置的构建,因此使用了useed= 16:
在这里插入图片描述
如果在图4中再附加一个位来进行6位假设,那么表示在1/16和16之间的值范围的假设将附加分数位,而不是指数位。
假设我们将一个假设p的位字符串视为一个有符号的整数,范围从−2n−1到2n−1−1。设k为由状态位表示的整数,e为由指数位表示的无符号整数。
如果分数位的集合是{f1f2 … ffs},可能是空集,设f是由1.f1f2 … ff表示的值。
在这里插入图片描述
(换算公式,重要)
状态和es位是标准浮点数中指数位的函数;他们一起设置了分数的2次幂缩放,其中每个使用的增量是2es位的批移。
最大值使用useedn−2,最小值使用useed2−n。图5中显示了一个假设解码的示例(为了清晰起见,这里的es有一个“非标准”值)。
符号位0表示该值为正。状态位0001有3个0秒,这意味着k是−3;因此,由状态为贡献的比例因子是256−3
其他的比较简单,看图就可以理解,这里就不再过多赘述。

8位Posit和神经网络训练

虽然IEEE浮点没有定义“四分之一精度”的8位浮点,但es = 0的8位posit被证明对某些方面非常有用;它们足够强大来训练神经网络。
目前,半精度(16位)IEEE浮点数经常用于这一目的,但8位假设有可能更快2−4×。
神经网络训练的一个重要函数是sigmoid函数。如图六绿色曲线
在这里插入图片描述
一个常见的sigmoid函数是1/(1 + e−x),它计算起来很昂贵,很容易需要超过100个时钟周期。因为数学库被调用来计算exp(x),而且还要计算除法。
使用posit,可以简单地翻转x的位置的第一位,向右移动两位(左侧移动0位),图6中得到的posit函数(用洋红色显示)非常接近1/(1 + e−x)(用绿色表示);它甚至有与y轴相交的正确斜率。

使用Useed来匹配或超过浮动点的动态范围

我们将一个数字系统的动态范围定义为从最小到最大的正有限值的几十年数,从小值到极大值。也就是说,动态范围被定义为log10(maxpos)−log10(minpos)=log10(maxpos/minpos)。对于具有es = 0的8位定位系统,minpos为1/64,maxpos是64,所以动态范围约为36年。用es = 0定义的Posits优雅而简单,但它们的16位和更大版本的动态范围比相同大小的IEEE浮子要小。
例如,一个32位IEEE浮点点的动态范围约为83年,但一个具有es = 0的32位位置将只有大约180年的动态范围。
这里是一个es值表,它允许假设超过16位和32位大小的浮点数的动态范围,并与64位、128位和256位的大小紧密匹配。
在这里插入图片描述

选择es = 3作为32位posit的一个原因是,它不仅可以更容易地替换32位浮点数,还可以替换64位浮点数。类似地,170年的16位posit的动态范围将它们开放给目前仅用32位浮点数处理的应用程序。我们将证明,posit可以超过具有相同位宽的浮点数的动态范围和精度。

Float与Posit格式的定量比较

没有用posit表示的“NaN”;相反,计算被中断,中断处理程序可以设置为报告错误及其原因,或调用解决方案并继续计算,但是posit不会使将一个数字分配给根据定义不是数字的东西的逻辑错误。这大大简化了硬件。如果程序员发现需要使用NaN值,则表示程序还没有完成,并且应该将有效值的使用作为一种数值调试环境来调用,以查找和消除此类输出的可能来源。类似地,posit缺乏一个单独的像float一样的∞和−∞的表示;然而,有效支持开放间隔(maxpos,∞)和(−∞,−maxpos),它们提供了表达任何一个符号的无限结果的能力,因此对符号无穷的需要再次表明需要有效而不是posit。

在posit表示中没有“负零”;“负零”是对IEEE浮点数中存在的数学逻辑的另一种挑战。在posit中,当a = b,f (a) = f (b).IEEE 754标准说,“负零”的倒数是−∞,而“正零”的倒数是∞,但也说,负零等于正零。因此,浮点数意味着−∞=∞。

float有一个复杂的平等测试,判断a 是否等于 b这个判断,在a或b中存在NaN时,即使位模式相同,结果也始终是假的。如果位模式不同,a仍然有可能等于b,因为负0等于正零!对于posit,相等式检验与比较两个整数完全相同:如果位是相同的,则它们是相等的。如果有什么不同的地方,则它们不相等。posit与有符号整数具有相同的a<b关系;和有符号整数一样,你必须小心一切,但是如果你已经是有符号整数,在posit中你真的不需要单独的机器指令来进行位置比较。

在posit格式中没有异常数,即特殊的位模式表示隐藏的位是0而不是1。posit不使用“逐步下溢”。相反,他们使用了锥形的精度,这提供了逐步下溢的功能和一个对称的标准,逐渐溢出的功能。(浮点数不是逐渐溢出的,而是不对称的,并使用这些位模式来获得大量的、未使用的NaN值。)

对于硬件设计者来说,float有一个优势:指数的位的固定位置和分数意味着它们可以并行解码。而在posit中,在其他位被解码之前确定状态位有一点序列化。在处理器设计中有一个简单的解决方案,类似于用于加速float异常处理的技巧:一些额外的寄存器位可以附加到每个值,以节省在解码指令时提取大小信息的需要。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Freesia 项目引用的依赖

UML图 项目总依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version> </parent> <groupId>com.freesia</groupId> <artifa…

Java ElasticSearch面试题

Java ES-ElasticSearch面试题 前言1、ElasticSearch是什么&#xff1f;2. 说说你们公司ES的集群架构&#xff0c;索引数据大小&#xff0c;分片有多少 &#xff1f;3. ES的倒排索引是什么&#xff1f;4. ES是如何实现 master 选举的?5. 描述一下 ES索引文档的过程&#xff1a;…

【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

目录 PodKubernetes 网络模型同一Pod上的容器之间进行通信同一Node上的不同Pod之间进行通信不同Node上的Pod之间进行通信Service参考 Pod 首先来回顾一下Pod&#xff1a; Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载&#xff0c;并封装一…

mybatisPlus中 Mapper层以及Service层的方法 整理分类 以及代码实操

MyBatis-Plus是一个基于MyBatis的增强工具&#xff0c;旨在简化开发、提高效率。它提供了通用的mapper和service&#xff0c;可以在不编写任何SQL语句的情况下&#xff0c;快速实现对单表的CRUD、批量、逻辑删除、分页等操作。 功能代码测试前提&#xff1a; 需要对mybatisPl…

git介绍4.2

git(版本控制工具) 一、git 介绍 1、git是目前世界上最先进的分布式版本控制系统&#xff0c;可以有效&#xff0c;高速的处理从小到大的项目版本管理。 2、git是linux torvalds 为了帮助管理linux内核开发二开发的一个开放源码的版本控制软件。 3、git作用&#xff1a;更好…

Kubernetes(k8s第二部分)

资源清单相当于剧本 什么是资源&#xff1a; k8s中所有的内容都抽象为资源&#xff0c;资源实例化后&#xff0c;叫做对象。 1.K8S中的资源 集群资源分类 名称空间级别&#xff1a; kubeadm k8s kube-system kubectl get pod -n default 工作负载型资源&#xff0c;&a…

光栅化算法

多数计算机图形图像&#xff0c;是通过光栅显像显示给用户的&#xff0c;这种系统将图像作为像素阵列进行显示&#xff0c;像素&#xff08;pixel&#xff09;即图像元素&#xff08;picture element&#xff09;的简称。这些像素采用RGB颜色空间。本文讨论光栅显像的基本原理&…

基于ceph-deploy部署Ceph 集群

Ceph分布式存储一、存储基础1、单机存储设备1.1 单机存储的问题 2、分布式存储(软件定义的存储SDS)2.1 分布式存储的类型 二、Ceph简介1、Ceph优势2、Ceph架构3、Ceph 核心组件4、OSD 存储后端5、Ceph 数据的存储过程6、Ceph 版本发行生命周期 三、Ceph 集群部署1、 基于 ceph-…

【软考】数据结构之队列和栈

目录 1.例题一1.1题目1.2 题目截图1.3 题目分析 1.例题一 1.1题目 输出受限的双端队列是指元素可以从队列的两端输入&#xff0c;但只能从队列的一端输出&#xff0c;如下图所示&#xff0c;若有e1&#xff0c;e2&#xff0c;e3&#xff0c;e4依次进入输出受限的双端队列&…

基于JAVA的生鲜超市销售系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 商品档案模块2.2 商品进货模块2.3 商品销售模块2.4 供应商模块2.5 活动管理模块2.6 消息通知模块 三、系统展示四、核心代码4.1 查询商品4.2 商品入库4.3 商品出库4.4 查询商品类型4.5 查询店铺活动 五、免责说明 一、摘…

137.乐理基础-协和音程、不协和音程

内容参考于&#xff1a; 三分钟音乐社 上一个内容&#xff1a;136.旋律音程、和声音程、自然音程、变化音程 上一个内容里练习的答案&#xff1a; 所有音程都可以分成协和音程与不协和音程两大类 协和音程又分三个小类&#xff1a; 第一个小类叫极完全协和音程&#xff0c;就…

Vue Html中插入本地视频(Video 标签)

在 Vue 中插入本地视频可以通过使用标签来实现。你可以将视频文件放在你的项目中的合适位置&#xff08;比如assets文件夹&#xff09;&#xff0c;然后在 Vue 组件中引用这个视频文件。html同理 首先&#xff0c;在你的 Vue 项目中的assets文件夹下放入你的视频文件&#xff…

十四、 修改报名名单

描述 GG Bond和牛妹报名了牛客运动会的双人项目&#xff0c;但是由于比赛前一天牛妹身体不适&#xff0c;不能参加第二天的运动&#xff0c;于是想让牛可乐代替自己。 请创建一个依次包含字符串Niuniu和Niumei的元组entry_form&#xff0c;并直接输出整个元组。 然后尝试使用…

MyBatis的补充用法

说明&#xff1a;之前介绍过MyBatis的用法&#xff0c;像 用注解和Mapper.xml操作数据库、在Mapper.xml里写动态SQL。最近在一次用MyBatis批量更新数据库对象的场景中&#xff0c;意识到对MyBatis的一些标签用法不太熟悉&#xff0c;所以去 MyBatis官网 看了一些文档&#xff0…

综合交易模型----可转债双低策略自动轮动实盘,提供源代码

原理 量化研究---可转债双低策略原理 文章链接 综合交易模型----可转债双低策略自动轮动实盘&#xff0c;提供源代码 (qq.com) 就是按照值来轮动&#xff0c;轮动规则 规则 "策略轮动设置":"策略轮动设置************************,轮动都按排名来", &…

界面控件Telerik UI for ASP. NET Core教程 - 如何为网格添加上下文菜单?

Telerik UI for ASP.NET Core是用于跨平台响应式Web和云开发的最完整的UI工具集&#xff0c;拥有超过60个由Kendo UI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格&#xff0c;提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。 上下文菜单允许开发者为应…

web服务器nginx下载及在win11的安装

一.背景 还是为了公司安排的师带徒任务。 操作系统版本&#xff1a;win11 家庭版 mginx版本&#xff1a;1.24.0 二.nginx版本选择与下载 我之前也写过下载nginx下载_ngnix stable 下载-CSDN博客 不想看寻找过程的&#xff0c;直接点这里去下载https://nginx.org/download…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理&#xff1f;如果你的组织处理关键或敏感的业务数据&#xff0c;测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%&#xff0c;这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

仿牛客网项目---帖子详情功能的实现

这篇文章主要讲讲帖子详情功能。其实帖子详情功能简单来说就是你点进去可以看到文章&#xff0c;这就叫帖子详情功能。那接下来我讲讲我的这个项目是如何实现这个功能的。 首先写DAO层。 Mapper public interface DiscussPostMapper {List<DiscussPost> selectDiscussPo…

寒假作业Day 02

这是第二天的作业&#xff0c;fighting&#xff01; Day 02 一、选择题 首先char* s[6]是指针数组&#xff0c;也就是其存储的都是这些字符串的地址&#xff0c;其实际上的类型为char**&#xff0c;而fun函数传入了s数组的首地址。而后续fun函数中打印字符&#xff0c;p[i]即…