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

问题描述 投票:-1回答: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参数位于每个线程库中,

我正在寻找一种技巧,可以减少参数传递并从其他来源访问数据。

我曾在考虑使用常量内存,但是由于常量内存位于全局变量中,因此将其删除。不用说,存储位置应该很快。

performance cuda gpu gpgpu
1个回答
5
投票
内核参数是通过常量内存(或sm_1x中的共享内存)传递的,因此您没有建议进行复制。

c.f。 programming guide

__ global__函数参数传递到设备:

    通过共享内存,在计算设备上限制为256个字节 能力1.x,
  • 通过恒定内存,在设备上限制为4 KB 2.x及更高版本的计算能力。
  • 当然,如果您随后在代码中修改了一个变量,那么您正在修改本地副本(根据C标准),因此每个线程将在寄存器中或(如果需要)在磁盘上拥有自己的副本。堆栈。
  • © www.soinside.com 2019 - 2024. All rights reserved.