我正在尝试使用 MSVS 2012 和 CUDA 编译一个包含内核的程序。我使用共享内存,但与关于同一问题的这个问题不同,我只将我的变量名用于此内核的共享内存一次,因此不存在重新定义的问题。使用这样的代码:
template<typename T>
__global__ void mykernel(
const T* __restrict__ data,
T* __restrict__ results)
{
extern __shared__ T warp_partial_results[];
/* ... */
warp_partial_results[lane_id] = something;
/* ... */
results[something_else] = warp_partial_results[something_else];
/* ... */
}
它被实例化为几种类型(例如float,int,unsigned int),我得到了可怕的
declaration is incompatible with previous "warp_partial_results"
信息。什么可能导致这种情况?