-1

我正在寻找一种优雅的方式来在 CUDA 内核中传递多个重复的参数,

众所周知,每个内核参数都位于每个 CUDA 线程的堆栈上,因此,内核传递给每个线程的参数之间可能存在重复,即位于每个堆栈上的内存。

为了尽量减少传递的重复参数的数量,我正在寻找一种优雅的方式。

为了解释我的担忧:假设我的代码如下所示:

   kernelFunction<<<gridSize,blockSize>>>(UINT imageWidth, UINT imageWidth, UINT imageStride, UINT numberOfElements,x,y,ect...)

UINT imageWidth、UINT imageWidth、UINT imageStride、UINT numberOfElements 参数位于每个线程 stock ,

我正在寻找一种技巧来发送更少的参数并从其他来源访问数据。

我正在考虑使用常量内存,但由于常量内存位于 global 上,所以我放弃了它。不用说内存位置应该很快。

4

1 回答 1

5

内核参数通过常量内存(或 sm_1x 中的共享内存)传入,因此没有您建议的复制。

参见编程指南

__global__ 函数参数传递给设备:

  • 通过共享内存,在计算能力为 1.x 的设备上限制为 256 字节,
  • 通过恒定内存,在计算能力 2.x 及更高版本的设备上限制为 4 KB。

当然,如果您随后修改代码中的一个变量,那么您正在修改本地副本(根据 C 标准),因此每个线程都将拥有自己的副本,或者在寄存器中,或者如果需要,在堆栈中。

于 2013-02-13T15:53:52.150 回答