PyCUDA: GPUArray.get() returns 无法访问的数组

PyCUDA: GPUArray.get() returns inaccessible array

我正在尝试在 GPU 中求和一个数组,然后在主机上获取它。为此,我使用了 pycuda.gpuarray.sum() 函数。

import pycuda.gpuarray
a = np.array([1,2,3,4,5])
b = gpuarray.to_gpu(a)
c = gpuarray.sum(b)
c = c.get()
print(c)   #Prints array(15)
print(type(c)) #Prints numpy.ndarray
print(c[0]) #Error, Index error - too many indices for array
print(c.shape) #Prints (), empty tuple

如何将 sum() 函数的解返回为普通整数元素?

正如@Robert Crovella 所说,

函数 gpuarray.sum() 只是 returns 对所有元素求和后的标量。因此,您的变量 c 将始终被初始化为一个 0 维 numpy 数组(换句话说,一个标量),这就是为什么当您尝试访问其中的元素时,您将空元组作为输出和错误的原因。

如果您希望这是一个一维数组,您可以这样做:

import pycuda.autoinit
import pycuda.gpuarray as gpuarray
import numpy as np

a = np.array([1,2,3,4,5])
d_a = gpuarray.to_gpu(a)
d_c = gpuarray.sum(d_a)

h_d = np.zeros((1,))
h_d[0] = d_c.get()
print("np.array h_d: ", h_d)
print("h_d[0] = ", h_d[0])

(PyCuda 2020.1)