PAb*_*PAb 0 python gpu numpy cupy
我想使用cupy测试浮点数是否为正,例如:
import cupy as cp
u = cp.array(1.3)
u < 2.
>>> array(True)
Run Code Online (Sandbox Code Playgroud)
我的问题是此操作非常缓慢:
%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
Run Code Online (Sandbox Code Playgroud)
并且似乎此代码的瓶颈(为此n)是对的评估result < 1.2。它仍然比在CPU上快得多,因为dot成本更低。
在GPU上运行单个操作始终是一个坏主意。为了从GPU中获得性能提升,您需要实现良好的“计算强度”。即,相对于存储器的移动执行的计算量;从全局ram到gpu mem,或者从gpu mem到核心本身。如果每个字节的计算强度至少没有几个扑朔迷离的触发器,您可以放心地忘记在gpu上实现任何加速。就是说,您的问题可能会助长GPU加速,但您当然不能以任何有意义的方式单独对此类语句进行基准测试。
但是,即使您的算法由在gpu上链接许多这样的简单的低计算强度运算组成,您仍然对加速感到失望。您的瓶颈将是您的gpu内存带宽;与cpu内存带宽相比,这确实没有那么大,因为它可能会在纸上看起来。除非您要编写自己的计算密集型内核,或者没有计划使用Cupy运行一些大型ftft,否则不要以为仅移植您的numpy代码就能给您带来任何子弹般的提速。
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |