缓慢的GPU比较cupy



我想使用cupy测试cupy,例如:

import cupy as cp
u = cp.array(1.3)
u < 2.
>>> array(True)

我的问题是此操作非常慢: %timeit u < 2.在我的计算机上给出26个微型秒。它比我在CPU中获得的数量级要大。我怀疑这是因为您必须在CPU上施放...

我正在尝试找到一种更快的方法来执行此操作。

谢谢!

编辑澄清

我的代码像:

import cupy as cp
n = 100000
X = cp.random.randn(n)  # can be greater
for _ in range(100):  # There may be more iterations
    result = X.dot(X)
    if result < 1.2:
        break

似乎该代码的瓶颈(对于此n)是result < 1.2的评估。它仍然比CPU快得多,因为dot的成本较低。

在GPU上运行一个操作总是一个坏主意。为了从GPU中获得性能提高,您需要实现良好的"计算强度";也就是说,相对于记忆运动的计算量;从全球RAM到GPU MEM,或从GPU MEM到核心本身。如果您至少没有计算强度的小字节的hunderd拖鞋,那么您可以忘记意识到GPU上的任何加速。这就是说您的问题可能会使GPU加速,但您当然不能以任何有意义的方式孤立地基准这样的陈述。

但是,即使您的算法也包括在GPU上链接许多如此简单的低计算强度操作,您仍然会对加速感到失望。您的瓶颈将是您的GPU内存带宽;与CPU内存带宽相比,这实际上并不是很棒的,因为它可能会在纸上看。除非您要编写自己的Compute-Intense内核,或者有计划运行一些大FFT或使用Cupy的计划,否则不要以为它会通过移植您的numpy代码来为您提供任何银色bullet速度。

这可能是因为,当使用CUDA时,必须在处理之前将数组复制到GPU。因此,如果您的数组只有一个元素,则在GPU中,它比在CPU中慢。您应该尝试一个较大的数组,看看是否一直在发生

我认为这里的问题是您只是利用一个GPU设备。考虑使用Say 100并行执行所有计算(尽管在您的简单示例代码的情况下,只需要一次需要一次)。https://docs-cupy.chainer.org/en/stable/tutorial/basic.html

还可以使用杯子更大的功能来进行GPU

中的比较

还需要为GPU编译DOT首次调用内核函数,这将比随后的调用大得多。

最新更新