为什么数字浮动16破坏OpenBlas/Atlas的功能?

2024-05-19 22:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我知道float16不是真正的基元类型,但它是由Python/numpy模拟的。然而,问题是:如果存在这种情况,并且Python允许在数组乘法中使用numpy.dot()函数,为什么OpenBlas(或ATLAS)不能正常工作?我的意思是,乘法是有效的,但是并行计算不行。或者再次,以一种不同的方式(在我看来更好),为什么Python/numpy允许使用float16,如果我们不能利用OpenBlas/ATLAS提供的高级功能呢?在


Tags: 函数功能numpy利用类型方式情况数组
2条回答

纽比是一种奇怪的,可能是邪恶的野兽。它是一个IEEE754半精度浮点数,符号为1位,指数为5位,尾数为10位。在

虽然它是一个标准的浮点数,但它是一个新手,并没有被广泛使用。一些gpu支持它,但是硬件支持在cpu中并不常见。较新的处理器有在16位和32位浮点之间转换的命令,但不支持在数学运算中直接使用它。由于这一点以及在普通低级语言中缺少合适的数据类型,16位浮点比32位浮点的使用速度慢。在

只有很少的工具支持它。通常,16位浮点被视为一种存储格式,在使用前将其转换为32位浮点。在

一些基准:

In [60]: r=random.random(1000000).astype('float32')

In [61]: %timeit r*r
1000 loops, best of 3: 435 us per loop

In [62]: r=random.random(1000000).astype('float16')

In [63]: %timeit r*r
100 loops, best of 3: 10.9 ms per loop

作为一般用途,不要将其用作压缩存储以外的任何其他用途。即便如此,也要意识到妥协:

^{pr2}$

相关问题 更多 >