gpt4 book ai didi

python - 加速 GPU 与 CPU 矩阵运算

转载 作者:太空狗 更新时间:2023-10-29 22:05:26 24 4
gpt4 key购买 nike

我想知道有多少 GPU 计算可以帮助我加快模拟速度。

我的代码的关键部分是矩阵乘法。基本上,代码类似于以下 python 代码,其中包含 1000 阶矩阵和长 for 循环。

import numpy as np
m_size = 1000
sim_length = 50

a = np.random.rand(m_size, m_size)
b = np.random.rand(m_size, m_size)

for j in range(sim_length):
result = np.dot(a,b)

注意:我的矩阵很密集,大部分是随机的,for 循环是用 cython 编译的。

我天真的猜测有两个因素:

  • 更多并行线程(当前为 1 阶线程,GPU 为 100 阶线程?)--> 100 阶加速? [ Source非常过时,从 2011 年开始]
  • 较低的处理器频率(目前为 3Ghz,GPU 通常为 2Ghz)--> 忽略

我认为这种观点太天真了,所以我错过了什么?

最佳答案

矩阵乘法性能

如果您使用numpy,您可能正在使用 BLAS 库之一作为计算后端,例如 ATLAS、OpenBLAS、MKL 等。当您使用最快的 MKL 时,您可以找到最近的性能基准测试,在最近的 Nvidia GPU K40m 和 Intel Xeon 12 核 E5-2697 v2 @ 2.70GHz 之间

https://developer.nvidia.com/cublas

其中 K40m 比 12 线程 E5-2697 快 6 倍。考虑到 MKL 在多核 CPU 上的扩展性很好。 K40m 比 1 线程 E5-2697 快 72 倍。另请注意,1000-dim 几乎是充分利用 GPU 和 CPU 的下限。较小的矩阵大小通常会导致 GPU 性能下降更多。

如果您为 numpy 使用较慢的 BLAS 后端,请使用 GNU 许可的 ATLAS。然后,您可以在此处找到 MKL 和 ATLAS 之间的比较

https://software.intel.com/en-us/intel-mkl/benchmarks#DGEMM-ATLAS

其中 MKL 比 ATLAS 快 2~4 倍。

对于 Nvidia GPU,唯一广泛使用的后端是 CUDA 的 cuBLAS,因此性能不会像 ATLAS vs. MKL 那样有太大变化。

数据传输

正如@janbrohl 所说,主机 RAM 和 GPU 设备内存之间的数据传输是影响整体性能的重要因素。这是数据传输速度的基准。

CUDA - how much slower is transferring over PCI-E?

给定矩阵大小,您实际上可以分别计算出计算和数据传输的绝对时间。这些可以帮助您更好地评估性能。

为了最大限度地提高 GPU 的性能,您可能需要重新设计程序以最大限度地减少数据传输,方法是将所有计算操作移至 GPU,而不仅仅是矩阵乘法。

关于python - 加速 GPU 与 CPU 矩阵运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com