Я пытаюсь построить массивы гистограмм неподписанного символа, соответствующие каждому пикселю в изображении для реализации алгоритма gPb.У меня сбой при вызове cudaMalloc, который я не могу решить.Я просмотрел другие подобные вопросы и всегда проверял, возвращали ли предыдущие операции cudaSuccess или нет.Вот мой код:
Сначала я выделяю эту структуру в конструкторе моего класса CudaImage:
bool CudaImage::create2DHistoArray()
{
//preparing histograms
m_LastCudaError = cudaMalloc((void**)&m_dHistograms, (m_Height + 2 * m_Scale) * sizeof(unsigned int*));
if (m_LastCudaError != cudaSuccess)
return false;
//set all histograms to nullptr
m_LastCudaError = cudaMemset(m_dHistograms, 0, (m_Height + 2 * m_Scale) * sizeof(unsigned int*));
if (m_LastCudaError != cudaSuccess)
return false;
return true;
}
, затем в какой-то момент я бы вызвал функцию-член для выделения некоторых из m_dHistograms [i]следующим образом:
bool CudaImage::initializeHistoRange(int start, int stop)
{
for (int i = start; i < stop; ++i) {
m_LastCudaError = cudaMalloc((void**)&m_dHistograms[i], 256 * 2 * m_ArcNo * (m_Width + 2 * m_Scale) * sizeof(unsigned int));
if (m_LastCudaError != cudaSuccess) {
return false;
}
//set all pixels in the gradient images to 0
m_LastCudaError = cudaMemset(m_dHistograms[i], 0, 256 * 2 * m_ArcNo * (m_Width + 2 * m_Scale) * sizeof(unsigned int));
if (m_LastCudaError != cudaSuccess)
return false;
}
return true;
}
Первый cudaMalloc в этой последней функции падает без единого предупреждения.При работе с cuda-memcheck я получаю следующее сообщение:
"Возможно, в приложении произошла ошибка при разыменовании единой памяти с хоста. Пожалуйста, перезапустите приложение под отладчиком хоста, чтобы перехватить такие ошибки."
Кто-нибудь может помочь?Другой вопрос будет, правильно ли реализовано распределение массива.Я не хочу выделять всю память с самого начала, потому что это будет слишком много, поэтому я выделяю в конструкторе (первая функция) только указатели на строки массива, а затем в приложении я выделяю память, когда мне это нужно, и освобождаюМне не нужно.