另外一种则是手工的动态分配global memory, 例如通过cudaMalloc*()之类的函数.如果是动态定义的, 则需要单独将kernel做一个修改:
//删除 __device__ your_type...而这里需要说的则是, 如同global memory一样, 这个也有动态分配的和静态分配的两种:
(1)静态分配的是:
__global__ void your_kernel(......请注意手册这里是将extern那行写在kernel外面的, 我建议总是写在里面.
不过这不是重点, 用户可以随心的选择喜欢的风格.有人可能会问, 我可否两种分配方式同时使用?...答案是可以的,这就如同你同时可以使用2种风格的显存分配一样——__device__的静态分配 + cudaMalloc*()的动态分配
也就是最终会形成这样的代码:
__global__ void...最后再来到一点, 就是计算能力7.0允许支持大于48KB的shared memory分配,但需要使用动态分配的方式.