256位定点算术,未来?

时间:2016-05-09 15:27:06

标签: performance floating-point precision cpu-architecture fixed-point

只是一些愚蠢的想法,但如果计算机能够有效地计算256位算术,比如他们有256位架构,我认为我们可以取消浮点。我也想知道,如果有任何理由要超越256位架构?我的基础是相当脆弱,但我相信如果我错了你就会把我弄直;)这是我的想法:

你可以使用256位类型,对于整数使用127或128位,对于小数值使用127或128位,然后当然是符号位。如果您的硬件能够计算,存储和移动这些大数字而没有任何问题,我认为您将设置为处理您遇到的任何计算。

一个例子:如果您使用长度,并且您以米为单位表示所有值,则最小值(2 ^ -128米)将小于普朗克长度,最大值(2 ^ 127米)会比可观察宇宙的直径大。想象一下,计算精度小于普朗克长度的光年数?

好的,这只是一个例子,但我很难想到任何可能保证数量大于小的情况。有什么想法吗?我没有考虑定点运算是否存在问题?创建256位架构是否存在问题?

2 个答案:

答案 0 :(得分:6)

SIMD将使狭义类型永远有价值。如果你可以进行256位加法,你可以在同一个硬件上并行执行8个32位整数加法(通过不传播元素边界的进位)。或者你可以做32个8位的补充。

Hardware multiplier circuits要做得更广泛要贵得多,所以假设一个256b X 256b乘法器是可行的,这不是一个好的假设。

即使除了SIMD考虑因素外,内存带宽/缓存占用空间也是一笔巨大的交易。

所以4B float将继续非常出色,因为它足够精确,非常有用,但足够小,可以将许多元素打包成大型矢量或缓存。

浮点还允许更宽范围的数字,通过使用它的一些位作为指数。对于尾数= 1.0,IEEE binary64 double的范围从2 -1022 变为2 1023 ,对于“正常”数字(整个53位尾数精度)范围,只有越来越差的非正规(逐渐下溢))。您的提案仅处理从大约2 -127 (精度为1位)到2 127 (精度为256b)的数字。

浮点在任何幅度都有the same number of significant figures(直到你进入非常接近零的非正规),因为尾数是固定宽度。通常这是一个有用的属性,特别是在乘法或除法时。有关FP为什么好的示例,请参阅Fixed Point Cholesky Algorithm Advantages。 (减去两个附近的数字是一个问题,但是......)

即使当前的SIMD指令集已经有256b个向量,但最宽的元素宽度为64b。 AVX2的最宽乘法是32bit * 32bit => 64位。

AVX512DQ有一个64b * 64b - > 64b(低半)vpmullq,可能会显示在Skylake-E (Purley Xeon)

AVX512IFMA引入了52b * 52b + 64b => 64位整数FMA。 (VPMADD52LUQ低半部分和VPMADD52HUQ高半部分。)52位输入精度显然是use the FP mantissa multiplier hardware,而不需要单独的64位整数乘法器。 (64位全乘法器的全向量宽度甚至比vpmullq更昂贵。即使对于64位整数,这样的折衷设计应该是一个很大的暗示,宽乘法器很昂贵)。请注意,这不是基线AVX512F的一部分,也不是基于Clang git提交的may show up in Cannonlake

如果指令集是为其设计的(英特尔SSE / AVX不是),则可以在SIMD中支持任意精度的加/倍(对于像RSA这样的加密应用)。 Discussion on Agner Fog's recent proposal for a new ISA included an idea for SIMD add-with-carry

要在32位或64位硬件上实际实现256b数学运算,请参阅https://locklessinc.com/articles/256bit_arithmetic/https://gmplib.org/。考虑到它的需求很少,这真的不是那么糟糕。

使用非常宽的整数寄存器构建硬件的另一个重大缺点是,即使高位通常未使用,无序执行硬件也需要能够处理它的情况用过的。与具有64位寄存器的架构相比,这意味着更大的物理寄存器文件(这很糟糕,因为它需要非常快速且物理上靠近CPU的其他部分,并且具有许多读取端口)。例如Intel Haswell has 168-entry PRFs表示整数和FP / SIMD。

FP寄存器文件已经有256个寄存器,所以我想如果你要做这样的事情,你可以用使用SIMD向量寄存器作为输入/输出的执行单元来做,而不是通过加宽整数寄存器。但是FP / SIMD执行单元通常不连接到整数进位标志,因此您可能需要一个单独的SIMD进位寄存器来进行256b的添加。

英特尔或AMD已经可以实现一个指令/执行单元,用于在xmm或ymm寄存器中添加128b或256b整数,但它们没有。 (即使添加的最大SIMD元素宽度也是64位。只有shuffle作为一个整体在整个寄存器上运行,然后只有字节粒度或更宽。)

答案 1 :(得分:2)

128位电脑。它还涉及寻址存储器以及在寻址存储器时耗尽64位。目前有些服务器有4TB内存。这需要大约42位(2 ^ 42> 4×10 ^ 12)。如果我们假设内存价格每两年减半,那么我们每两年需要多一点。我们仍然有22位,所以至少2 * 22年,内存价格可能不会那么快下降 - >超过50年,当我们用完64位寻址功能时。