假设我的CUDA内核有很长的参数列表。为方便起见,我把它们放在一个结构中:
struct params {
int firstParam;
float secondParam;
...
bool lastParam;
}
使用
调用内核时是否存在缺点myKernel<<<n,m>>>( params );
与首次复制到常量内存相比?
cudaMemcpyToSymbol( paramsOnDevice, ¶msOnHost, sizeof(params), 0 );
答案 0 :(得分:3)
在计算能力2.0及更高版本的设备上,内核参数大小的限制为4KB(参见programming guide)。这意味着如果你的结构非常大,那么你可能遇到这个限制,但是由于参数是通过常量内存传递的,因此行为或多或少相同。
复制到符号可能具有非常小的好处的一种情况是,使用相同的参数多次启动相同的内核,显式复制意味着您只复制一次而不是每次复制。但是我希望在大多数实际情况下,这个好处很小 - 如果你担心的话,你可以测量一下这个好处!