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

时间:2018-09-21 19:39:41

标签: python cuda pycuda

我是pycuda的新手。在我的代码中,每个线程都需要计算二维数组的一行。但是,正如我在示例中看到的那样,仅使用基于元素的分发。如何基于数组的行分配它?

1 个答案:

答案 0 :(得分:1)

  

....基于元素的分布

鉴于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] = ....;
     }
}

[显然从未编译或测试,使用风险自负]

设置代码将row作为指向输入数组给定行的第一个元素的指针,该行的前导尺寸为lda。显然,列主存储的代码将更改,我将其留给读者练习。