我正在尝试使用 cupy 并行化以下操作:我有一个数组。对于该数组的每一列,我生成 2 个随机向量。我取那个数组列,添加一个向量,减去另一个,然后使这个新向量成为数组的下一列。我继续,直到我完成阵列。
我已经问过以下问题 - Cupy 在遍历数组时比 numpy 慢。但这是不同的,因为我相信我遵循了并行化操作的建议,并使用一个“for循环”而不是两个,并且只遍历数组列而不是行和列。
import cupy as cp
import time
#import numpy as cp
def row_size(array):
return(array.shape[1])
def number_of_rows(array):
return(array.shape[0])
x = (cp.zeros((200,200), 'f'))
#x = cp.zeros((200,200))
x[:,1] = 500000
vector_one = x * 0
vector_two = x * 0
start = time.time()
for i in range(number_of_rows(x) - 1):
if sum(x[ :, i])!=0:
vector_one[ :, i + 1], vector_two[ :, i+ 1] = cp.random.poisson(.01*x[:,i],len(x[:,i])), cp.random.poisson(.01 * x[:,i],len(x[:,i]))
x[ :, i+ 1] = x[ :, i] + vector_one[ :, i+ 1] - vector_two[ :, i+ 1]
time = time.time() - start
print(x)
print(time)
当我在 cupy 中运行它时,时间大约为 0.62 秒。
当我切换到 numpy 时,我 1) 取消注释 #import numpy as cp 和 #x = cp.zeros((200,200)) 和 2) 改为注释 import cupy as cp 和 x = (cp.zeros((200,200), ' F')):
时间大约为 0.11 秒。
我想也许如果我增加数组大小,例如从 (200,200) 到 (2000,2000),那么我会看到 Cupy 的速度更快,但它仍然更慢。
从某种意义上说,我知道这可以正常工作,因为如果我将 cp.random.poisson 中的系数从 0.01 更改为 0.5,我只能在 cupy 中这样做,因为 lambda 对于 numpy 来说太大了。
但是,我如何使用 cupy 让它变得更快?