3

在我使用 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

我试过 profiling einsum,但它只是将所有计算委托给 C 函数,所以我不知道这种性能差异的主要原因是什么。

4

1 回答 1

3

我对你的f16f32数组的测试表明,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?

于 2017-05-22T07:15:29.810 回答