翻译论文: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异常处理的技巧:一些额外的寄存器位可以附加到每个值,以节省在解码指令时提取大小信息的需要。
相关文章:
翻译论文:Beating Floating Point at its Own Game: Posit Arithmetic(一)
仅作记录学习使用,侵删 原文Beating Floating Point at its Own Game: Posit Arithmetic 参考翻译Posit: 替换IEE754的新方式 | SIGARCH 摘要 IEEE标准754浮点数(浮点数)的直接接点替换 Posit的优势 不需要区间算术或可变大小操作数 如…...
【数据结构-图论】并查集
并查集(Union-Find)是一种数据结构,它提供了处理一些不交集的合并及查询问题的高效方法。并查集主要支持两种操作: 查找(Find):确定某个元素属于哪个子集,这通常意味着找到该子集的…...
云计算时代的运维: 职业发展方向与岗位选择
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…...
java锁底层概述
Java中的锁是并发编程中核心的同步机制之一,用于控制多个线程对共享资源的访问,以保证数据的一致性和完整性。Java锁的底层实现依赖于操作系统的原生线程模型和Java虚拟机(JVM)的实现。这里主要讨论两种常见的锁:synch…...
win10如何添加指纹登陆
1、首先进入设置,进入下一个设置页面 2、在下一个设置页面内,我们直接使用右上角的搜索框,输入“指纹/finger”进行搜索。回车之后进入设置指纹登陆选项 3、设置指纹登陆的前期是设置好你的密码和pin码(先要设定登录密码和pin码),这里pin和密码都可以直接登陆我们的win10,设…...
足底筋膜炎的症状及治疗
足底筋膜炎症状:足底筋膜炎通常表现为足跟部疼痛,尤其是在晨起或长时间站立、行走后加重。疼痛可能向足底前部或足弓处放射,严重时可能影响行走。此外,患者还可能出现足跟部肿胀、皮肤温度升高、局部压痛等症状。 足底筋膜炎治疗方…...
udp丢包问题研究
//发现udp 有收不到数据包现象. 一: 观察丢包 1. ifconfig enp8s0 2. netstat -s -u 二: 修改系统缓存参数. recv_buffer_size 修改系统buffer_size sysctl -w net.core.rmem_max26214400 sysctl -w net.core.rmem_default26214400 三: 应用程序考虑 av_dict_set(&m_o…...
在idea中用模板骨架初始创建maven管理的web项目时没有src有关的目录的解决方案
一.问题如下 二.解决方法 首先关闭当前项目,接着修改全局设置,重新创建项目 在VM Options中添加"-DarchetypeCataloginternal",点击ok保存 点击创建,如果创建成功没报错且有src,就ok了。 当然如果出现以下…...
WPF 【十月的寒流】学习笔记(2):MVVM中是怎么实现通知的
文章目录 前言相关链接代码仓库项目配置代码初始代码ViewPersonViewModel 尝试老办法通知解决方案ObservableCollectionBindingListICollectionView 总结 前言 我们这次详细了解一下列表通知的底层是怎么实现的 相关链接 十月的寒流 MVVM实战技巧之:可被观测的集合…...
数据结构:广义表
定义:有序数列 表示GL=(a(b,c))长度 2, 表头:a 表尾:(&am…...
你好,C++(18) 到底要不要买这个西瓜?4.1.6 操作符之间的优先顺序
你好,C(18) 到底要不要买这个西瓜?4.1.6 操作符之间的优先顺序 4.1.6 操作符之间的优先顺序 在表达一些比较复杂的条件判断时,在同一个表达式中,有时可能会存在多个操作符。比如,我们在判断要…...
C语言 for 循环语句的基本格式是什么?
一、问题 for 循环语句在C语⾔中是最为常见的循环语句,其功能强⼤,⽽且⽤法灵活,那么它的基本格式是什么呢? 二、解答 for 语句的⼀般形式为: for(表达式1;表达式2;表达3)语句; 每条 for 语句包含三个⽤分…...
项目-SERVER模块-日志宏
日志宏 #define INF 0 #define DBG 1 #define ERR 2#define LOG_LEVEL INF #define LOG(level, format, ...) do {\if (level < LOG_LEVEL) break;\time_t t time(NULL);\struct tm *ltm localtime(&t);\char tmp[32] {0};\strftime(tmp, 31, "%H:%M:%S"…...
TCP为什么要三次握手?
TCP三次握手协议是为了在不可靠的互联网环境中可靠地建立起一个连接,三次握手可以确保两端的发送和接收能力都是正常的。 那么,为什么是三次而不是二次或四次握手呢? 为什么不是二次握手? 如果是二次握手,即客户端发…...
网络防御第6次作业
防病毒网关 按照传播方式分类 病毒 病毒是一种基于硬件和操作系统的程序,具有感染和破坏能力,这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地,它是病毒传播的目的地,又是下一次感染的出发点。计算机病毒感染的一般过…...
Jmeter分布式部署
前期准备: 1. 控制机一台,代理机一台,Jmeter安装包 操作步骤: 1. Linux安装Jmeter(windows安装教程自己搜一下) 1.1创建一个单独的文件夹(jmeter),用来存放Jmeter的安装包 mkdir jmeter 1.2…...
Odoo迈入开源第一低代码开发平台的重要里程碑
Odoo17的正式发布已经过去好几个月了,通过一段时间的运用,最大的感触就是,Odoo会成为企业管理软件低代码开发平台的重要一员,而V17则会成为这个过程中具有里程碑意义的版本。 时隔四个月,让我们回头来看看Odoo17带来的…...
WinForm、Wpf自动升级 AutoUpdater.NET
Github AutoUpdater.NET 目录 一、IIS部署 更新站点 二、创建Winform 一、IIS部署 更新站点 IIS默认站点目录下创建 目录 Downloads、Updates Updates目录创建文件 UpdateLog.html、AutoUpdaterStarter.xml UpdateLog.html: <html><body><h1…...
GPU不够用:语言模型的分布式挑战
引言 随着深度学习技术的飞速发展,大规模语言模型(LLM)在各种NLP任务中取得了令人瞩目的成绩。然而,这些模型的大小和复杂度也不断增加,给部署和应用带来了诸多挑战。特别是在单个GPU或服务器的内存容量有限的情况下,如何高效地利用分布式计算资源成为了一个亟待解决的问…...
深入理解Redis中的渐进式Rehash技术
1. 引言 Redis是一款高性能的键值存储系统,被广泛应用于缓存、队列、计数器等场景,因其快速、稳定的特性备受开发者青睐。在Redis的背后,有着许多复杂的数据结构和算法支撑着其高效运行,而其中之一就是Rehash操作。 Rehash是Redis中的一个关键操作,负责在数据量增加时对…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
