了解cp.RawKernel中的网格和块

时间:2019-06-27 16:17:37

标签: cupy

在第https://buildmedia.readthedocs.org/media/pdf/cupy/latest/cupy.pdf页的第11页中显示的有关cp.RawKernel的使用的示例对我来说,就网格的使用而言,尚不清楚,因为矩阵是正方形的。

我试图改变矩阵的形状,并尝试使用网格和块。 我不清楚为什么要获得正确的结果,我必须设置网格8和块8 喜欢 乘法(((8,),(8,),(p,q,z))#网格,块和参数

import cupy as cp #Importing CuPy

#Defining the CUDA kernel
multiply = cp.RawKernel(r'''
extern "C" __global__
void multiply(const int* p, const int* q, int* z) {
    int tid = blockDim.x * blockIdx.x + threadIdx.x;
    z[tid] = p[tid] + q[tid];
 }
''', 'multiply')

#First two arrays are set as 0,1,2,3....upto 300
p = cp.arange(30, dtype=cp.int).reshape(6,5)
q = cp.arange(30, dtype=cp.int).reshape(6,5)

#Setting a new array with zeros to pass to kernel for computation
z = cp.zeros((6,5), dtype=cp.int)
#Invoking the kernel with a grid of 250 blocks, each consisting of 1024 threads
multiply((6, ), (5, ), (p, q, z))  # grid, block and arguments

#Displaying the output computed on the kernel
print(z)

我希望像上面的代码那样检索正确的结果设置 乘法(((6,),(5,),(p,q,z))#网格,块和参数

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

您还从引用的示例中更改了数据类型,但您做错了。

如果您指定正确的Cupy数据类型(GestureDetector( onTap: () {}, // handle your image tap here child: Image.asset( 'assets/cat.jpg', fit: BoxFit.cover, // this is the solution for border width: 110.0, height: 110.0, ), ) )以匹配您选择的原始内核数据类型(cp.int32),那么您的代码对我来说是正确的,

int