Я только что обновился до последней (выпуска) CUDA 4.1 с 4.0, и ни один из моих проектов больше не работает должным образом. Более того, проблемы кажутся странными. Я могу понять, что некоторые указатели на память устройства остаются NULL
после cudaMalloc
, но это происходит не сразу. Nsight и визуальный профилировщик говорят мне, что некоторые функции, связанные с памятью (cudaMemcpy
и т. П.), Возвращают неизвестные флаги ошибок. cudaStreamQuery
также в основном возвращает флаг неготовности потока.
Извините за неопределенность, но в этом суть. В разных проектах проблема проявляется по-разному, но в основном это нулевые указатели.
У кого-нибудь есть идея, что дает?
Обновление: Хорошо, в одном из проектов отладчик Nsight помечает загрузку памяти вне диапазона, но я все еще не могу понять, почему. Это работало раньше. Кроме того, адреса, к которым отладчик CUDA говорит, что я пытаюсь получить доступ, не имеют особого смысла, учитывая код:
// Get the mask pixel, if it has been supplied.
if (maskImage != NULL)
maskPixel = *(static_cast<uchar*>(maskImage->imageData) + maskImage->widthStep * (int) yPosition + (int) xPosition);
Теперь весь варп пытается получить доступ, по словам отладчика, из-за пределов адресов. Но yPosition
и
xPosition
значения все меньше размеров маски! Кроме того, адрес, к которому все потоки в этой деформации, кроме нескольких, пытаются получить доступ, равен 0x200000002
. Я не могу понять это.
Обновление 2: Я исправил последнюю проблему - как и ожидалось, это была ошибка пользователя. Теперь у меня есть еще один в другом проекте, и на этот раз я могу подтвердить, что это связано с CUDA 4.1. cudaBindTexture2D()
вызывает ошибку invalid argument
там, где ее раньше не было. Я полагаю, это проблема выравнивания текстур?