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

news2024/11/16 17:37:29

仅作记录学习使用,侵删
原文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异常处理的技巧:一些额外的寄存器位可以附加到每个值,以节省在解码指令时提取大小信息的需要。

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

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

相关文章

PoC免写攻略

在网络安全领域&#xff0c;PoC&#xff08;Proof of Concept&#xff09;起着重要的作用&#xff0c;并且在安全研究、漏洞发现和漏洞利用等方面具有重要的地位。攻击方视角下&#xff0c;常常需要围绕 PoC 做的大量的工作。常常需要从手动测试开始编写 PoC&#xff0c;再到实…

Home Assistant:基于Python的智能家居开源系统详解

Home Assistant&#xff1a;基于Python的智能家居开源系统详解 在数字化和智能化的时代&#xff0c;智能家居系统成为了现代家庭的新宠。它们能够让我们更加方便地控制家中的各种设备&#xff0c;实现自动化和个性化的居住体验。其中&#xff0c;Home Assistant作为一款基于Pyt…

性能优化问题思考总结

INP 是什么&#xff1f; Interaction to Next Paint (INP) INP是一项指标&#xff0c;通过观察用户在访问网页期间发生的所有点击、点按和键盘互动的延迟时间&#xff0c;评估网页对用户互动的总体响应情况。 互动是指在同一逻辑用户手势期间触发的一组事件处理脚本。例如&a…

【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第一篇笔记。主要记录下多智能体的运行…

【论文精读】DALLE: Zero-Shot Text-to-Image Generation零样本文本到图像生成

文章目录 一、前言二、摘要三、方法&#xff08;一&#xff09;主要目标&#xff08;二&#xff09;stage 1&#xff1a;训练离散变分自动编码器&#xff08;dVAE&#xff09;&#xff08;三&#xff09;stage 2&#xff1a;训练自回归转换器&#xff08;四&#xff09;公式表达…

RT-Thread使用PWM时出现的问题(4.x版本)

编译出现问题 1. 发现对应的结构体没有相关参数 问题原因 这个字段是在后面的os版本新增的&#xff0c;导致前面的版本没法使用&#xff0c;这个字段是为了做兼容高级定时器部分的处理 处理方案 第一种最简单&#xff0c;就是升级os版本。&#xff08;推荐&#xff09;第二…

思维题(蓝桥杯 填空题 C++)

目录 题目一&#xff1a; ​编辑 代码&#xff1a; 题目二&#xff1a; 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目五&#xff1a; 代码&#xff1a; 题目六&#xff1a; 代码七&#xff1a; 题目八&#x…

10.selenium的基本使用

selenium是一个关于爬虫功能python的库&#xff0c;它的整体逻辑与之前的请求爬虫思路不同。selenium是模拟出一个浏览器&#xff0c;你通过代码操作这个浏览器从而获取一些信息&#xff0c;比如执行click()就相当于点击了浏览器中的某个元素&#xff0c;相当于是针对浏览器的鼠…

CSP-201712-2-游戏

CSP-201712-2-游戏 解题思路 初始化变量&#xff1a;定义整数变量n和k&#xff0c;分别用来存储小朋友的总数和淘汰的特定数字。然后定义了num&#xff08;用来记录当前报的数&#xff09;和peopleIndex&#xff08;用来记录当前报数的小朋友的索引&#xff09;。 初始化小朋…

《CrackCollect》

CrackCollect 类型&#xff1a;益智学习 视角&#xff1a;2d 乐趣点&#xff1a;趣味化英语学习&#xff0c;闯关增加学习动力 时间&#xff1a;2019 个人职责&#xff1a; 1、所有功能的策划讨论 2、所有开发工作 3、所有上架工作 此游戏旨在针对英语水平处于初级阶段的人&…

揭示 Wasserstein 生成对抗网络的潜力:生成建模的新范式

导 读 Wasserstein 生成对抗网络 (WGAN) 作为一项关键创新而出现&#xff0c;解决了经常困扰传统生成对抗网络 (GAN) 的稳定性和收敛性的基本挑战。 由 Arjovsky 等人于2017 年提出&#xff0c;WGAN 通过利用 Wasserstein 距离彻底改变了生成模型的训练&#xff0c;提供了一个…

前端监控与埋点

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

SINAMICS V90 PN 指导手册 第6章 BOP面板 LED灯、基本操作、辅助功能

概述 使用BOP可进行以下操作&#xff1a; 独立调试诊断参数查看参数设置SD卡驱动重启 SINAMICS V90 PN 基本操作面板 LED灯 共有两个LED状态指示灯&#xff0c;(RDY和COM)可用来显示驱动状态&#xff0c;两个LED灯都为三色(绿色/红色/黄色) LED灯状态 状态指示灯的颜色、状…

什么是VR虚拟现实|虚拟科技博物馆|VR设备购买

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种通过计算机技术模拟出的一种全新的人机交互方式。它可以通过专门的设备&#xff08;如头戴式显示器&#xff09;将用户带入一个计算机生成的虚拟环境之中&#xff0c;使用户能够与这个虚拟环境进行交互…

1小时网络安全事件报告要求,持安零信任如何帮助用户应急响应?

12月8日&#xff0c;国家网信办起草发布了《网络安全事件报告管理办法&#xff08;征求意见稿&#xff09;》&#xff08;以下简称“办法”&#xff09;。拟规定运营者在发生网络安全事件时应当及时启动应急预案进行处置。 1小时报告 按照《网络安全事件分级指南》&#xff0c…

centos7单节点部署ceph(mon/mgr/osd/mgr/rgw)

使用ceph建议采用多节点多磁盘方式部署&#xff0c;本文章仅作为单节点部署参考&#xff0c;请勿用于生产环境 使用ceph建议采用多节点多磁盘方式部署&#xff0c;本文章仅作为单节点部署参考&#xff0c;请勿用于生产环境 使用ceph建议采用多节点多磁盘方式部署&#xff0c;…

2024年2月文章一览

2024年2月编程人总共更新了5篇文章&#xff1a; 1.2024年1月文章一览 2.Programming Abstractions in C阅读笔记&#xff1a;p283-p292 3.Programming Abstractions in C阅读笔记&#xff1a;p293-p302 4.Programming Abstractions in C阅读笔记&#xff1a;p303-p305 5.P…

如何在jupyter notebook 中下载第三方库

在anconda 中找到&#xff1a; Anaconda Prompt 进入页面后的样式&#xff1a; 在黑色框中输入&#xff1a; 下载第三方库的命令 第三方库&#xff1a; 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具&#xff0c;…

2024年腾讯云优惠券领取页面_代金券使用方法_新老用户均可

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

【IC前端虚拟项目】inst_buffer子模块DS与RTL编码

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 需要说明一下的是,在我所提供的文档体系里,并没有模块的DS文档哈,因为实际项目里我也不怎么写DS毕竟不是每个公司都和HISI一样对文档要求这么严格的。不过作为一个培训的虚拟项目,还是建议在时间充裕…