在我使用 numpy 1.12.0 的基准测试中,计算点积float32
ndarrays
比其他数据类型快得多:
In [3]: f16 = np.random.random((500000, 128)).astype('float16')
In [4]: f32 = np.random.random((500000, 128)).astype('float32')
In [5]: uint = np.random.randint(1, 60000, (500000, 128)).astype('uint16')
In [7]: %timeit np.einsum('ij,ij->i', f16, f16)
1 loop, best of 3: 320 ms per loop
In [8]: %timeit np.einsum('ij,ij->i', f32, f32)
The slowest run took 4.88 times longer than the fastest. This could mean that an intermediate result is being cached.
10 loops, best of 3: 19 ms per loop
In [9]: %timeit np.einsum('ij,ij->i', uint, uint)
10 loops, best of 3: 43.5 ms per loop
我尝试过分析einsum
,但它只是将所有计算委托给一个C函数,所以我不知道这种性能差异的主要原因是什么。
我和你的测试f16
and f32
数组表明f16
所有计算都慢 5-10 倍。仅在进行数组等字节级操作时才有效copy
float16 更紧凑的性质是否显示出任何速度优势。
https://gcc.gnu.org/onlinedocs/gcc/Half-Precision.html
该部分是否位于gcc
关于半个浮点数的文档,fp16。有了正确的处理器和正确的编译器开关,就有可能以加速这些计算的方式安装 numpy。我们还必须检查是否numpy
.h
文件有任何对半浮点数进行特殊处理的规定。
较早的问题可能足以作为重复参考
Python Numpy 数据类型性能
Python numpy float16 数据类型运算和 float8?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)