C++ Cuda错误超出范围

C++ Cuda错误超出范围,c++,memory,cuda,shared-memory,C++,Memory,Cuda,Shared Memory,我在内核中的共享内存分配方面遇到了问题,我经常遇到越界错误。据我所知,每个线程都可以部分地将数据加载到名为private atom的第一个共享块中,在for循环中,每次迭代时,我都会将下一个连续块加载到不同的共享内存中,以便计算从我的线程到下一个连续块中所有线程的空间距离,然后我计算线程和本地块中所有其他线程之间的距离 由于我的错误是关于越界问题,我怀疑我的问题是如何将内存复制到共享内存中 pdh_priv(bucket * histogram,atom * list, double width

我在内核中的共享内存分配方面遇到了问题,我经常遇到越界错误。据我所知,每个线程都可以部分地将数据加载到名为private atom的第一个共享块中,在for循环中,每次迭代时,我都会将下一个连续块加载到不同的共享内存中,以便计算从我的线程到下一个连续块中所有线程的空间距离,然后我计算线程和本地块中所有其他线程之间的距离

由于我的错误是关于越界问题,我怀疑我的问题是如何将内存复制到共享内存中

pdh_priv(bucket * histogram,atom * list, double width, int size, int BlockSize)
{
 int t = threadIdx.x;
 int b = blockIdx.x;
 unsigned int reg = t + b * blockDim.x;

 extern __shared__ atom private_atom[];

if(t < BlockSize)   
    private_atom[t] = list[t];
__syncthreads();


for(int i = b + 1; i < size/BlockSize; ++i)
{
     extern __shared__ atom localBlock[];

    unsigned int tempIdx = t + i *blockDim.x;
        localBlock[tempIdx] = list[tempIdx];
    __syncthreads();
    for(int j = 0; j < BlockSize;++j)
    {
        double distance = p2p_distance(private_atom[t], localBlock[j]);
        int pos = (int) (distance/width);
        atomicAdd(&histogram[pos].d_cnt,1);
    }

}

for(int i = t+1;i < BlockSize;++i)
{
    double distance = p2p_distance(list,t,i);
    int pos = (int) (distance/width);
    atomicAdd( &histogram[pos].d_cnt,1);
} 
pdh_priv(bucket*直方图、atom*列表、双宽度、int-size、int-BlockSize)
{
int t=threadIdx.x;
intb=blockIdx.x;
无符号整数reg=t+b*blockDim.x;
外部共享原子私有原子[];
if(t
}

我正在用这个调用初始化内核

pdh_priv <<<ceil(PDH_acnt/BlockSize),BlockSize,BlockSize*sizeof(atom) >>>(dev_Histo, dev_atomL,PDH_res,PDH_acnt,BlockSize);
pdh_priv(开发历史、开发原子、pdh_res、pdh_acnt、块大小);
我发现了我的问题

该行: localBlock[thempIdx]=列表[tempIdx]

正在尝试访问一个越界位置,但它应该只写入线程位置,如下所示:
localBLock[thhreadIdx.x]=list[tempIdx]

请更正、重新格式化并接受您的答案或将其删除,以便该问题将从CUDA标签的未回答列表中删除