Ошибка Cuda вне границ - PullRequest
0 голосов
/ 27 июня 2018

У меня проблемы с распределением общей памяти в ядре, где я продолжаю выходить за пределы ошибок. Насколько я понимаю, каждый поток можно использовать для частичной загрузки данных в первый общий блок, называемый частным атомом, и в цикле 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 <<<ceil(PDH_acnt/BlockSize),BlockSize,BlockSize*sizeof(atom) >>>(dev_Histo, dev_atomL,PDH_res,PDH_acnt,BlockSize);

1 Ответ

0 голосов
/ 27 июня 2018

Я нашел свою проблему.

строка: localBlock [thempIdx] = список [tempIdx]

пытается получить доступ к местоположению вне границ, когда оно должно только записывать в местоположение потока, например так: localBLock [thhreadIdx.x] = список [tempIdx];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...