问题描述
我想使用 cuda 流来加速 GPU 上的小计算。到目前为止,我的测试包括以下内容:
import cupy as xp
import time
x = xp.random.randn(10003,20000) + 1j * xp.random.randn(10003,20000)
y = xp.zeros_like(x)
nStreams = 16
streams = [xp.cuda.stream.Stream() for ii in range(nStreams)]
f = xp.fft.fft(x[:,:200])
t = time.time()
for ii in range(int(x.shape[1]/100)):
ss = streams[ii % nStreams]
with ss:
y[:,ii*200:(ii+1)*200] = xp.fft.fft(x[:,ii*200:(ii+1)*200],axis=0)
for ii,ss in enumerate(streams):
ss.synchronize()
print(time.time()-t)
t = time.time()
for ii in range(int(x.shape[1]/100)):
y[:,axis=0)
xp.cuda.Stream.null.synchronize()
print(time.time()-t)
生产
[user@pc snippets]$ intelpython3 strm.py
0.019365549087524414
0.018717050552368164
我很难相信我所做的一切都是正确的。此外,当将 FFT 调用替换为对 xp.sum
的调用时,情况变得更加严重,这会产生
[user@pc snippets]$ intelpython3 strm.py
0.002195596694946289
0.001004934310913086
cupy 流背后的原理是什么?我如何利用它们来发挥我的优势?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)