Проблемы CUDA 4.1 - PullRequest
       5

Проблемы CUDA 4.1

3 голосов
/ 02 февраля 2012

Я только что обновился до последней (выпуска) 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 там, где ее раньше не было. Я полагаю, это проблема выравнивания текстур?

1 Ответ

0 голосов
/ 07 февраля 2012

CUDA не работает на cudaBindTexture2D(), как я уже говорил выше.Я исправил это, убедившись, что распределение памяти было хорошо выровнено;в частности, я изменил все 2D (изображения) выделения, чтобы использовать тональную память, заменив cudaMalloc() на cudaMallocPitch().Это решает проблемы выравнивания.

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