2024-05-19 22:26:52 发布
网友
好的,我知道float16不是真正的基元类型,但它是由Python/numpy模拟的。然而,问题是:如果存在这种情况,并且Python允许在数组乘法中使用numpy.dot()函数,为什么OpenBlas(或ATLAS)不能正常工作?我的意思是,乘法是有效的,但是并行计算不行。或者再次,以一种不同的方式(在我看来更好),为什么Python/numpy允许使用float16,如果我们不能利用OpenBlas/ATLAS提供的高级功能呢?在
float16
numpy.dot()
纽比是一种奇怪的,可能是邪恶的野兽。它是一个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
作为一般用途,不要将其用作压缩存储以外的任何其他用途。即便如此,也要意识到妥协:
纽比是一种奇怪的,可能是邪恶的野兽。它是一个IEEE754半精度浮点数,符号为1位,指数为5位,尾数为10位。在
虽然它是一个标准的浮点数,但它是一个新手,并没有被广泛使用。一些gpu支持它,但是硬件支持在cpu中并不常见。较新的处理器有在16位和32位浮点之间转换的命令,但不支持在数学运算中直接使用它。由于这一点以及在普通低级语言中缺少合适的数据类型,16位浮点比32位浮点的使用速度慢。在
只有很少的工具支持它。通常,16位浮点被视为一种存储格式,在使用前将其转换为32位浮点。在
一些基准:
作为一般用途,不要将其用作压缩存储以外的任何其他用途。即便如此,也要意识到妥协:
^{pr2}$相关问题 更多 >
编程相关推荐