CUDA:使用内核参数与复制到符号时有缺点吗?

时间:2013-08-09 08:34:23

标签: cuda

假设我的CUDA内核有很长的参数列表。为方便起见,我把它们放在一个结构中:

struct params {
  int firstParam;
  float secondParam;
  ...
  bool lastParam;
}

使用

调用内核时是否存在缺点
myKernel<<<n,m>>>( params );

与首次复制到常量内存相比?

cudaMemcpyToSymbol( paramsOnDevice, &paramsOnHost, sizeof(params), 0 );

1 个答案:

答案 0 :(得分:3)

在计算能力2.0及更高版本的设备上,内核参数大小的限制为4KB(参见programming guide)。这意味着如果你的结构非常大,那么你可能遇到这个限制,但是由于参数是通过常量内存传递的,因此行为或多或少相同。

复制到符号可能具有非常小的好处的一种情况是,使用相同的参数多次启动相同的内核,显式复制意味着您只复制一次而不是每次复制。但是我希望在大多数实际情况下,这个好处很小 - 如果你担心的话,你可以测量一下这个好处!