我是pycuda的新手。在我的代码中,每个线程都需要计算二维数组的一行。但是,正如我在示例中看到的那样,仅使用基于元素的分发。如何基于数组的行分配它?
答案 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
。显然,列主存储的代码将更改,我将其留给读者练习。