【问题标题】:In pycuda, how to distribute the rows of a 2-D array to each threads?在 pycuda 中,如何将二维数组的行分配给每个线程?
【发布时间】:2019-02-26 05:50:54
【问题描述】:

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

【问题讨论】:

  • 你问的是ElementwiseKernel吗?还是通用的CUDA内核代码?
  • 一个通用的 CUDA 内核。

标签: python cuda pycuda


【解决方案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。显然,列主存储的代码会发生变化,我把它留给读者练习。

【讨论】:

  • 抱歉我的描述不好。并感谢您的回复。它确实对我有帮助。我会试一试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2020-08-03
  • 2022-11-27
相关资源
最近更新 更多