问题描述
我最近发现this library似乎提供了自己的类型和实数运算,比普通浮点算术快2到3个数量级。
该库基于对实数使用不同的表示形式。被描述为比浮点数posit效率更高且数学上更准确的一个。
如果这种表示非常有效,为什么不将其广泛用于各种应用程序中并以硬件实现呢?据我所知,大多数典型硬件都使用某种IEEE浮点数表示形式来表示实数。
这是否可能只适用于某些非常特殊的AI研究,因为他们似乎大多将其列为示例?
如果这种表示方法不仅比浮点数快数百至数千倍,而且更具确定性,并且设计用于并发系统,那么为什么不在GPU中实现它呢?数字?它不会在渲染性能和GPU计算功能方面带来巨大的进步吗?
解决方法
我知道的最客观和令人信服的理由是,posits是在不到4年前推出的。这还不足以进入市场(人们需要时间来开发实现),更不用说接手了(这尤其需要克服与现有软件的不兼容性)。
该行业是否要进行这样的更改是一个趋于主观性的独立问题。
,IEEE标准似乎较慢的原因是因为 IEEE 解决了一些具有较高重要性的主题。例如:
。 。
浮点算术的IEEE标准(IEEE 754)定义:
算术格式:二进制和十进制浮点数据集,由有限数字(包括带符号的零和次正规数),无穷大和特殊的“非数字”值(NaN)组成
交换格式:可以用于以有效且紧凑的形式交换浮点数据的编码(位字符串)
取整规则:在算术和转换过程中取整数字时要满足的属性
运算符:运算符和算术格式的其他运算(例如三角函数)
异常处理:特殊情况的指示(例如被零除,溢出等)
以上内容摘自Wikipedia:https://en.wikipedia.org/wiki/IEEE_754
。 。
您的链接库(似乎被称为 posit number system )具有以下优点。
经济-没有位模式是多余的。对于无穷大,存在一种表示形式,表示为±inf和零。所有其他位模式是有效的不同的非零实数。 ±inf代替NaN。
数学上的优雅-零只有一种表示形式,并且编码在1.0左右对称。通过quire进行延迟舍入可以支持关联和分布定律,从而可以在任何并发环境中实现可重现的线性代数算法。
锥度精度-锥度精度是指指数较小的值具有较高的精度位数,指数较大的值具有较低的精度位数。这个概念是由Morris(1971)在他的论文“锥形浮点:新的浮点表示”中首次引入的。
参数化精度和动态范围-位置由大小nbit和指数位数es定义。这使系统设计人员可以自由选择应用所需的正确精度和动态范围。例如,对于AI应用程序,我们可以选择5或6位无任何指数位的位置来提高性能。对于诸如5G基站之类的嵌入式DSP应用,我们可以选择一个具有1个指数位的16位正位,以提高每瓦特的性能。
简单电路-只有两种特殊情况,不是实数和零。没有非规格化的数字,上溢或下溢。
以上内容是从GitHub复制的:https://github.com/stillwater-sc/universal
。 。
所以,在我看来,存放号系统倾向于性能,而 IEEE浮点算术标准(IEEE 754)则倾向于技术兼容性和互换性。 / p>
,我强烈质疑该库比IEEE浮点运算速度快的说法:
现代硬件包括专门设计用于处理IEEE浮点算术的电路。根据您的CPU型号,它可以每个时钟周期执行大约0.5到4个浮点运算。是的,该电路可以完成复杂的任务,但是由于它内置于硬件中并且经过多年的积极优化,因此可以达到这种速度。
任何提供不同浮点格式的软件库都必须在软件中执行算术运算。它不能只说“请使用双精度算术将这两个数相乘”,然后在两个时钟周期后看到结果出现在相应的寄存器中,它必须包含采用posit格式的四个不同部分,分别处理它们并融合的代码在一起的结果。该代码需要花费时间才能执行。时间远远超过两个时钟周期。
“通用”库在某些情况下可能会出现其序号格式发光的情况。但是速度并不是它希望竞争的地方。