CUDA:如何将多个重复的参数传递给CUDA内核

Tri*_*leS -1 performance cuda gpu gpgpu

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

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

为了最大限度地减少传递的重复参数的数量,我正在寻找一种优雅的方式.

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

   kernelFunction<<<gridSize,blockSize>>>(UINT imageWidth, UINT imageWidth, UINT imageStride, UINT numberOfElements,x,y,ect...)
Run Code Online (Sandbox Code Playgroud)

UINT imageWidth,UINT imageWidth,UINT imageStride,UINT numberOfElements参数位于每个线程库存中,

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

我正在考虑使用常量内存,但由于常量内存位于全局,因此我将其删除.不用说内存位置应该很快.

任何帮助,将不胜感激.

Tom*_*Tom 5

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

参考编程指南:

__global__函数参数传递给设备:

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

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

  • @TripleS:您正在尝试解决不存在的问题. (5认同)