f_f*_*ola 4 python performance numpy atlas openblas
好吧,我知道float16
它不是一个真正的原始类型,但它是由Python/numpy模拟的.但问题是:如果存在且Python允许在使用该numpy.dot()
函数的数组乘法中使用它,为什么OpenBlas(或ATLAS)不能正常工作?我的意思是,乘法有效,但并行计算没有.或者,再次,以不同的方式(在我看来更好),为什么Python/numpy允许使用,float16
如果那时我们不能利用OpenBlas/ATLAS提供的高级功能?
DrV*_*DrV 14
Numpy float16
是一个奇怪的,可能是邪恶的野兽.它是IEEE 754半精度浮点数,带有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
Run Code Online (Sandbox Code Playgroud)
作为一般用途,除了压缩存储之外,不要将其用于任何其他用途.甚至在那时意识到妥协:
In [72]: array([3001], dtype='float16') - array([3000], dtype='float16')
Out[72]: array([ 0.], dtype=float32)
Run Code Online (Sandbox Code Playgroud)