为什么不常用正算术表示?
Why aren’t posit arithmetic representations commonly used?
我最近发现 this library 似乎提供了自己的实数类型和运算,比普通浮点运算快 2 到 3 个数量级。
该库基于对实数使用不同的表示形式。一种被描述为比浮点更高效且数学上更准确的方法 - posit。
如果这种表示如此有效,为什么它没有广泛用于各种应用程序并在硬件中实现,或者也许是?据我所知,大多数典型的硬件都使用某种 IEEE 浮点表示法来表示实数。
它是否可能仅适用于某些非常具体的 AI 研究,因为他们似乎主要将其列为示例?
如果这种表示法不仅比浮点数快数百到数千倍,而且更具确定性和设计用于并发系统,为什么它不在 GPU 中实现,GPU 基本上是大规模并发计算器在实数上?不会带来渲染性能和GPU计算能力的巨大进步吗?
我知道的最 objective 和最有说服力的理由是 posits 是在不到 4 年前推出的。没有足够的时间打入市场(人们需要时间来开发实现),更不用说接管它了(除其他外,这需要克服与现有软件的不兼容性)。
行业是否要做出这样的改变是一个单独的问题,具有主观性。
之所以 IEEE 标准 似乎比较慢,是因为 IEEE 解决了一些更重要的主题。例如:
。
.
.
IEEE Floating-Point 算术标准 (IEEE 754) 定义:
算术格式:二进制和十进制集合floating-point数据,由有限数(包括有符号零和次正规数)、无穷大和特殊“非”组成一个数字”值(NaNs)
交换格式:可用于以高效紧凑的形式交换floating-point数据的编码(位串)
舍入规则: 运算和转换时舍入需要满足的属性
运算:算术格式上的算术和其他运算(如三角函数)
异常处理:异常情况的指示(如被零除、溢出等)
以上是从维基百科复制过来的:https://en.wikipedia.org/wiki/IEEE_754
。
.
.
你的链接库,好像叫正号系统,提倡以下优点。
经济 - 没有位模式是多余的。无穷大有一种表示形式,表示为 ± inf 和零。所有其他位模式都是有效的不同 non-zero 实数。 ± inf 替代 NaN。
数学优雅 - 零只有一种表示,编码在 1.0 左右对称。通过 quire 的延迟舍入支持结合律和分配律,从而在任何并发环境中实现可重现的线性代数算法。
锥形精度 - 锥形精度是指小指数的值具有更多的精度,而大指数的值具有更少的精度。这个概念最早是由 Morris (1971) 在他的论文“Tapered Floating Point: A New Floating-Point Representation”中提出的。
参数化精度和动态范围 -- 位置由大小 nbits 和指数位数 es 定义。这使系统设计人员能够自由选择应用所需的正确精度和动态范围。例如,对于 AI 应用程序,我们可能会选择没有任何指数位的 5 位或 6 位位置来提高性能。对于嵌入式 DSP 应用,例如 5G 基站,我们可能 select 16 位位和 1 个指数位以提高每瓦性能。
更简单的电路 - 只有两种特殊情况,非实数和零。没有非规范化数字、上溢或下溢。
以上是从GitHub复制过来的:https://github.com/stillwater-sc/universal
。
.
.
所以,在我看来,正数系统更喜欢性能,而IEEE Floating-Point算术标准(IEEE 754) 更喜欢技术兼容性和互换性。
我强烈质疑该库比 IEEE 浮点数更快的说法:
现代硬件包括专门设计用于处理 IEEE 浮点运算的电路。根据您的 CPU 模型,它可以执行大约 0.5 到 4 个浮点运算 每个时钟周期 。是的,这个电路做的事情很复杂,但是因为它是内置在硬件中并经过多年积极优化,所以它达到了这种速度。
任何提供不同浮点格式的软件库都必须在软件中执行运算。它不能只是说“请使用双精度算术将这两个数字相乘”并在两个时钟周期后看到结果出现在相应的寄存器中,它必须包含采用 posit 格式的四个不同部分的代码,分别处理它们并融合一起一个结果。并且该代码需要时间来执行。比仅仅两个时钟周期要多得多的时间。
“通用”库可能有极端情况,其位置编号格式大放异彩。但是速度不是它希望竞争的地方。
我最近发现 this library 似乎提供了自己的实数类型和运算,比普通浮点运算快 2 到 3 个数量级。
该库基于对实数使用不同的表示形式。一种被描述为比浮点更高效且数学上更准确的方法 - posit。
如果这种表示如此有效,为什么它没有广泛用于各种应用程序并在硬件中实现,或者也许是?据我所知,大多数典型的硬件都使用某种 IEEE 浮点表示法来表示实数。
它是否可能仅适用于某些非常具体的 AI 研究,因为他们似乎主要将其列为示例?
如果这种表示法不仅比浮点数快数百到数千倍,而且更具确定性和设计用于并发系统,为什么它不在 GPU 中实现,GPU 基本上是大规模并发计算器在实数上?不会带来渲染性能和GPU计算能力的巨大进步吗?
我知道的最 objective 和最有说服力的理由是 posits 是在不到 4 年前推出的。没有足够的时间打入市场(人们需要时间来开发实现),更不用说接管它了(除其他外,这需要克服与现有软件的不兼容性)。
行业是否要做出这样的改变是一个单独的问题,具有主观性。
之所以 IEEE 标准 似乎比较慢,是因为 IEEE 解决了一些更重要的主题。例如:
。 . .
IEEE Floating-Point 算术标准 (IEEE 754) 定义:
算术格式:二进制和十进制集合floating-point数据,由有限数(包括有符号零和次正规数)、无穷大和特殊“非”组成一个数字”值(NaNs)
交换格式:可用于以高效紧凑的形式交换floating-point数据的编码(位串)
舍入规则: 运算和转换时舍入需要满足的属性
运算:算术格式上的算术和其他运算(如三角函数)
异常处理:异常情况的指示(如被零除、溢出等)
以上是从维基百科复制过来的:https://en.wikipedia.org/wiki/IEEE_754
。 . .
你的链接库,好像叫正号系统,提倡以下优点。
经济 - 没有位模式是多余的。无穷大有一种表示形式,表示为 ± inf 和零。所有其他位模式都是有效的不同 non-zero 实数。 ± inf 替代 NaN。
数学优雅 - 零只有一种表示,编码在 1.0 左右对称。通过 quire 的延迟舍入支持结合律和分配律,从而在任何并发环境中实现可重现的线性代数算法。
锥形精度 - 锥形精度是指小指数的值具有更多的精度,而大指数的值具有更少的精度。这个概念最早是由 Morris (1971) 在他的论文“Tapered Floating Point: A New Floating-Point Representation”中提出的。
参数化精度和动态范围 -- 位置由大小 nbits 和指数位数 es 定义。这使系统设计人员能够自由选择应用所需的正确精度和动态范围。例如,对于 AI 应用程序,我们可能会选择没有任何指数位的 5 位或 6 位位置来提高性能。对于嵌入式 DSP 应用,例如 5G 基站,我们可能 select 16 位位和 1 个指数位以提高每瓦性能。
更简单的电路 - 只有两种特殊情况,非实数和零。没有非规范化数字、上溢或下溢。
以上是从GitHub复制过来的:https://github.com/stillwater-sc/universal
。 . .
所以,在我看来,正数系统更喜欢性能,而IEEE Floating-Point算术标准(IEEE 754) 更喜欢技术兼容性和互换性。
我强烈质疑该库比 IEEE 浮点数更快的说法:
现代硬件包括专门设计用于处理 IEEE 浮点运算的电路。根据您的 CPU 模型,它可以执行大约 0.5 到 4 个浮点运算 每个时钟周期 。是的,这个电路做的事情很复杂,但是因为它是内置在硬件中并经过多年积极优化,所以它达到了这种速度。
任何提供不同浮点格式的软件库都必须在软件中执行运算。它不能只是说“请使用双精度算术将这两个数字相乘”并在两个时钟周期后看到结果出现在相应的寄存器中,它必须包含采用 posit 格式的四个不同部分的代码,分别处理它们并融合一起一个结果。并且该代码需要时间来执行。比仅仅两个时钟周期要多得多的时间。
“通用”库可能有极端情况,其位置编号格式大放异彩。但是速度不是它希望竞争的地方。