Функция ввода использует слишком много общих данных (0x8020 байт + 0x10 байт, максимум 0x4000) - ошибка CUDA

Я использую Tesla C2050, который имеет вычислительные возможности 2.0 и имеет общую память 48KB, Но когда я пытаюсь использовать эту общую память nvcc компилятор выдает мне следующую ошибку

Entry function '_Z4SAT3PhPdii' uses too much shared data (0x8020 bytes + 0x10 bytes system, 0x4000 max)

Мой SAT1 - наивная реализация алгоритма сканирования, и потому я работаю с изображениями размером порядка 4096x2160 Я должен использовать двойной, чтобы рассчитать совокупную сумму. Хоть Tesla C2050 не поддерживает double, но, тем не менее, выполняет эту задачу, понижая ее до значения float. Но для ширины изображения 4096 размер разделяемой памяти оказывается больше 16 КБ, но он находится в пределах 48 КБ.

Кто-нибудь может помочь мне понять, что здесь происходит. Я использую инструментарий CUDA 3.0

2 ответа

Решение

По умолчанию карты Fermi работают в режиме совместимости: 16 КБ разделяемой памяти и 48 КБ L1 кеша на многопроцессорный процессор. Вызов API cudaThreadSetCacheConfig может использоваться для смены графического процессора на 48 КБ совместно используемой памяти и 16 КБ L1 кеша, если вам это требуется. Затем вы должны скомпилировать код для возможности вычисления 2.0, чтобы избежать ошибки генерации кода, которую вы видите.

Кроме того, ваш Telsa C2050 поддерживает двойную точность. Если вы получаете предупреждения компилятора об удалении double, это означает, что вы не компилируете свой код для правильной архитектуры. добавлять

--arch=sm_20

на ваш nvcc Аргументы и набор инструментов GPU будут скомпилированы для вашей карты Fermi и будут включать поддержку двойной точности и другие специфические аппаратные функции Fermi, включая больший объем разделяемой памяти.

Насколько я знаю, Cuda 3.0 поддерживает Compute 2.0. Я использую VS 2010 с CUDA 4.1 . Поэтому я предполагаю, что VS 2008 также должен быть несколько похожим. Щелкните правой кнопкой мыши по проекту и выберите "Свойства" -> Cuda C/C++ -> "Устройство" -> "Генерация кода". Измените его на compute_10,sm_10;compute_20,sm_20

Другие вопросы по тегам