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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 29 января 2012

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

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

--arch=sm_20

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

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

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

...