Python 在pycuda中,如何将二维数组的行分配给每个线程?

Python 在pycuda中,如何将二维数组的行分配给每个线程?,python,cuda,pycuda,Python,Cuda,Pycuda,我是pycuda的新手。在我的代码中,每个线程都需要计算一行二维数组。但是,正如我在示例中看到的,只使用了基于元素的分布。如何根据阵列的行分布它 。。。。基于元素的分布 这是一个非常奇怪的术语,因为CUDA或PyCUDA中根本没有“分布”的概念。在CUDA中,给定线程如何处理输入数据完全由程序员决定,没有任何预定义的“分布” 因此,在标准CUDA C内核中(这是您在PyCUDA中编写的,它实际上只是一个API包装器和编译系统),您可以对一行主要有序输入执行类似的操作: __global__ v

我是pycuda的新手。在我的代码中,每个线程都需要计算一行二维数组。但是,正如我在示例中看到的,只使用了基于元素的分布。如何根据阵列的行分布它

。。。。基于元素的分布

这是一个非常奇怪的术语,因为CUDA或PyCUDA中根本没有“分布”的概念。在CUDA中,给定线程如何处理输入数据完全由程序员决定,没有任何预定义的“分布”

因此,在标准CUDA C内核中(这是您在PyCUDA中编写的,它实际上只是一个API包装器和编译系统),您可以对一行主要有序输入执行类似的操作:

__global__ 
void kernel(float* array, int lda)
{
     int tid = threadIdx.x + blockIdx.x * blockDim.x;
     int rowid = tid * lda;
     float* row = array + rowid;

     for(int col=0; col<lda; col++) {
         row[col] = ....;
     }
}
\uuuu全局\uuuu
无效内核(浮点*数组,整数lda)
{
int tid=threadIdx.x+blockIdx.x*blockDim.x;
int rowid=tid*lda;
浮点*行=数组+行ID;

对于(int col=0;col)您是在询问
ElementwiseKernel
?还是通用CUDA内核代码?一个通用CUDA内核。很抱歉我的描述不好。谢谢您的回复。它确实对我有帮助。我会尝试一下。