是否值得在硬件中实现它?如果是的话为什么?如果不是为什么不呢?


抱歉,我认为很清楚我正在谈论十进制有理数!好的,比如 十进制数++ 对于 C++, 小数 对于.NET...希望现在已经清楚了:)

有帮助吗?

解决方案

最新修订的 IEEE 754:2008 标准确实使用问题中引用的软件中显示的表示形式定义了硬件十进制浮点数。该标准的先前版本(IEEE 754:1985)没有提供十进制浮点数。当前大多数硬件实现的是 1985 年标准,而不是 2008 年标准,但 IBM 的 iSeries 计算机使用 电源6 筹码 有这样的支持,也是如此 z10 大型机。

十进制浮点的标准化工作是由英国 IBM 的 Mike Cowlishaw 牵头的,他拥有 网站 充满有用的信息(包括问题中的软件)。在适当的时候,其他硬件制造商也可能会在其芯片上引入十进制浮点单元,但我还没有听到英特尔何时(或是否)添加十进制浮点单元的方向声明。Intel确实有优化 软件库 为了它。

C 标准委员会 正在寻求添加对十进制浮点的支持,这项工作是 TR 24732。

其他提示

某些IBM处理器有专用的硬件小数包括(十进制浮点| DFP-单元)。

在的贡献 回答年09月18在23:43 丹尼尔Pryden

的主要原因是,DFP-单元需要在一个芯片更多的晶体管然后BFP单元。原因是BCD码二进制环境来计算十进制数。该IEEE754-2008有几种方法,以尽量减少过载。似乎DPD hxxp://en.wikipedia.org/wiki/Binary_Integer_Decimal方法

://en.wikipedia.org/wiki/Densely_packed_decimal方法相比,BID hxxp是更有效

一般情况下,需要4个比特来覆盖十进制范围从0到9位的10至15是无效的,但仍然用BCD可能的。 因此,DPD压缩3 * 4 = 12位到10位,以覆盖从000至999的范围内,1024(10 ^ 2)的可能性。

在一般它是说,这是BFP更快然后DFP。 和BFP需要芯片上的更小的空间然后DFP。

为什么IBM实现的DFP单元的问题是相当简单的回答: 他们建立了金融市场的服务器。如果数据表示货币,它应该是可靠的。

使用硬件加速的十进制算术,一些错误不会accour如二进制。 1/5 = 0.2 => 0.0110011001100110011001100110 ...二进制所以经常馏分可以被避免。

和在Excel中overhelming round()函数将是无用的再:d (! - >功能= 1 *(0,5-0,4-0,1)WTF)

希望解释一下你的问题一点点!

有小数字符串加速度(一点点),但...

这是一个很好的问题。我的第一反应是的“宏OPS一直未能证明了” 的,但经过考虑之后,如果在一个功能单元来实现你在说什么会去一大堆更快。我猜想它归结为这些行动是否做得还不够重要。有宏观运算和特定应用的专用指令的相当遗憾的历史,特别是在金融十进制格式的旧的尝试都只是旧的行李了。例如,我怀疑,如果他们大量使用,但每PC 有英特尔BCD操作码的,其中包括

DAA, AAA, AAD, AAM, DAS, AAS

在很久以前,小数字符串指令是共同的高端硬件。目前尚不清楚的是,他们曾经取得了很大的基准不同。程序花费了大量的时间和测试分支和移动的东西和计算地址。它通常没有意义把宏观运营到指令集架构,因为整个事情似乎如果你给CPU的根本的东西做的最小的数字去比较快,所以它可以把所有的资源投入到做他们的越快越好。

这年头,连所有的二进制OPS实际上是在真正的ISA。该CPU转换遗留ISA到微操作在运行时的。它是由专门从事核心业务得很快的一部分。对于现在的遗留的transisters似乎在等待一些图形和3D工作,即,MMX,SSE,支持3DNow!

我想这可能是一个全新设计可能会做一些过激和统一的电流(HW)科学(SW)十进制浮点格式,但不要屏住呼吸。

没有,它们是非常存储器低效。而且计算也都在硬件上不容易实现(当然这是可以做到的,但它也可以用大量的时间)。 十进制格式的另一个缺点是,它不是应用广泛的,之前的研究表明,二进制格式的数字是更准确的格式是流行了一段时间。但是,现在的程序员知道更好。十进制格式岂不等于高效,更有损。还额外硬件的表示需要额外的指令集,这可以导致更困难的代码。

你想使用的硬件是相当常见的。

旧版CPU的硬件有BCD(Binaray编码的十进制)算术。 (小英特尔芯片有一个小的支持,由早期海报说明)

硬件BCD是在加速FORTRAN,其使用80位BCD对数字非常好。

用于弥补全球市场的显著比例科学计算。

由于每个人(相对而言)回家后PC运行Windows,市场上有微小 以百分比表示。所以没有人做它了。

既然你不介意的大多数事情双打64位(二进制浮点),它主要工作。

如果您使用128位二进制浮点在现代硬件矢量单元,这不是太糟糕。还是比80bit的BCD不太准确,但你明白了。

在较早的工作,从JPL以前一个同事很惊讶,我们仍然使用FORTRAN。 “我们已经转换为C和C ++他告诉我们。”我问他是如何解决的精度不够的问题。他们会没有注意到。 (他们有他们曾经有过也没有同样的空间探测器的着陆精度,但任何人都可以错过任何一个星球。)

因此,在向量单元基本上128bit的双打更好,并广泛使用。

我的20美分。请不要它表示为一个浮点数:)

十进制浮点标准 (IEEE 754-2008) 已由两家公司在硬件中实施; 国际商业机器公司基于 POWER 6/7 的服务器,以及 西尔心灵 基于 SilAx PCIe 的加速卡。

西尔心灵 发表了一个关于将十进制算术执行转换为使用其 硬件解决方案. 。时间大大缩短,能源消耗大幅减少。

此外,“Michael J.Schulte”等人揭示了非常积极的基准测试结果,以及 DPD 和 BID 格式(均在 IEEE 754-2008 标准中定义)之间的一些比较

您可以找到以下 pdf 文件:

  1. 十进制浮点库的性能分析及其对十进制软硬件解决方案的影响

  2. 十进制算术硬件设计综述

  3. 通过十进制浮点单元改善能量和延迟

这三篇论文应该足以解答你的问题了!

我推测有十进制数的没有计算密集型应用。在另一方面,浮点数被广泛在工程应用中使用,这必须处理大量的数据,不需要精确的结果,只需要保持所期望的精度范围内。

小数(和更一般地,馏分)是相对容易实现为一对整数。通用库无所不在,并且容易快速足以满足大多数的应用程序。

任何人谁需要在速度上的最终是要手动调整其执行(例如改变除数,以适应特定的使用,algebraicly合并/重新排序的操作,巧妙地利用SIMD的洗牌......)。仅仅编码最常用的功能集成到一个硬件ISA肯定会永远无法满足他们 - 在所有的可能性,它不会在所有帮助

在简单的答案是计算机是二进制机器。他们没有十个手指,他们有两个。所以建立硬件二进制数被显着更快,更容易,而且比建筑五金为十进制数的效率更高。

顺便说一句:十进制和二进制数是碱,而定点和浮点是用于近似有理数的机制。这两个是完全正交的:你可以有浮点十进制数(.NET的System.Decimal是这种方式实现)和定点二进制数(正常整数是这只是一个特例)

浮点运算实质上是在硬件中实现小数的尝试。这是麻烦的,这就是为什么部分在软件中创建了十进制类型。这是一个很好的问题,为什么CPU不支持更多类型的,但我想它可以追溯到CISC与RISC处理器 - RISC赢得了战斗的表现,所以他们试图让事情变得简单,这些天我猜

现代计算机通常是通用的。浮点运算是非常通用的,而小数有一个更为具体的目的。我认为这是一部分原因。

你的意思是典型的数值积分类型“INT”,“长”,“短”(等)?由于这些类型的操作都在硬件绝对实现。如果你谈论的是任意精度大数(“大数”和“小数”和这样的),它可能是一个使用这些数据类型和建筑五金处理任意大的数据格式的复杂操作的罕见的组合。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top