符合seo的网站,哪个网站可以做效果图,怎么开网站平台,国外做鞋子的网站吗仅作记录学习使用#xff0c;侵删 原文Beating Floating Point at its Own Game: Posit Arithmetic 参考翻译Posit: 替换IEE754的新方式 | SIGARCH
摘要
IEEE标准754浮点数#xff08;浮点数#xff09;的直接接点替换
Posit的优势 不需要区间算术或可变大小操作数 如…仅作记录学习使用侵删 原文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 unumubit表示相邻精确点之间的开放间隔也是以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⋅y2(mn/2新的指数位。否则新值位于它旁边现有的x和y值之间也就是说它表示算术平均值xy/2新的分数位。
例如图4显示了es2时从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来匹配或超过浮动点的动态范围
我们将一个数字系统的动态范围定义为从最小到最大的正有限值的几十年数从小值到极大值。也就是说动态范围被定义为log10maxpos−log10minposlog10maxpos/minpos。对于具有es 0的8位定位系统minpos为1/64maxpos是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 bf (a) f (b).IEEE 754标准说“负零”的倒数是−∞而“正零”的倒数是∞但也说负零等于正零。因此浮点数意味着−∞∞。
float有一个复杂的平等测试判断a 是否等于 b这个判断在a或b中存在NaN时即使位模式相同结果也始终是假的。如果位模式不同a仍然有可能等于b因为负0等于正零对于posit相等式检验与比较两个整数完全相同如果位是相同的则它们是相等的。如果有什么不同的地方则它们不相等。posit与有符号整数具有相同的ab关系和有符号整数一样你必须小心一切但是如果你已经是有符号整数在posit中你真的不需要单独的机器指令来进行位置比较。
在posit格式中没有异常数即特殊的位模式表示隐藏的位是0而不是1。posit不使用“逐步下溢”。相反他们使用了锥形的精度这提供了逐步下溢的功能和一个对称的标准逐渐溢出的功能。浮点数不是逐渐溢出的而是不对称的并使用这些位模式来获得大量的、未使用的NaN值。
对于硬件设计者来说float有一个优势指数的位的固定位置和分数意味着它们可以并行解码。而在posit中在其他位被解码之前确定状态位有一点序列化。在处理器设计中有一个简单的解决方案类似于用于加速float异常处理的技巧一些额外的寄存器位可以附加到每个值以节省在解码指令时提取大小信息的需要。