CUDA ptxas Error "функция использует слишком много общих данных"
Я никогда раньше не использовал CUDA или C++, но я пытаюсь запустить Ramses GPU ( http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html. Из-за ошибки в автогене. sh Я использовал./configure и получил этот рабочий. Таким образом, созданный make-файл содержит следующие флаги NVCC
NVCCFLAGS = -gencode=arch=compute_10,code=sm_10 -gencode=arch=compute_11,code=sm_11 -gencode=arch=compute_13,code=sm_13 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_20,code=compute_20 -use_fast_math -O3
Но когда я пытаюсь скомпилировать программу, используя make, я получаю несколько ошибок ptxas:
Entry function '_Z30kernel_viscosity_forces_3d_oldPfS_S_S_iiiiiffff' uses too much shared data (0x70d0 bytes + 0x10 bytes system, 0x4000 max)
Entry function '_Z26kernel_viscosity_forces_3dPfS_S_S_iiiiiffff' uses too much shared data (0x70d0 bytes + 0x10 bytes system, 0x4000 max)
Entry function '_Z32kernel_viscosity_forces_3d_zslabPfS_S_S_iiiiiffff9ZslabInfo' uses too much shared data (0x70e0 bytes + 0x10 bytes system, 0x4000 max)
Я пытаюсь скомпилировать этот код в Linux с помощью Kernel 2.6 и CUDA 4.2 (я пытаюсь сделать это в своем университете, но они не обновляют регулярно) на двух NVIDIDA C1060. Я попытался заменить sm_10, sm_11 и sm_13 на sm_20, (я видел это исправление здесь: функция ввода использует слишком много общих данных (0x8020 байт + 0x10 байт система, 0x4000 макс.) - ошибка CUDA), но это не решило мою проблему. У вас есть какие-нибудь предложения? Я могу загрузить Makefile, а также все остальное, если вам это нужно. Спасибо за помощь!
1 ответ
Код, который вы компилируете, требует статического выделения 28880 байт (0x70d0) разделяемой памяти на блок. Для вычислительных возможностей 2.x и более новых графических процессоров это не проблема, поскольку они поддерживают до 48 КБ общей памяти. Однако для устройств с возможностями вычислений 1.x ограничение общей памяти составляет 16 КБ (и до 256 байт из них могут быть использованы аргументами ядра). Из-за этого код не может быть скомпилирован для устройств compute 1.x, и компилятор выдает ошибку, сообщающую вам об этом. Таким образом, ошибка возникает из-за указания sm_13/compute_13
компилятору. Вы можете удалить это, и сборка должна работать.
Однако становится еще хуже. Tesla C1060 - это устройство с вычислительной способностью 1.3. В результате вы не сможете скомпилировать и запустить эти ядра на своих графических процессорах. Не существует решения, кроме как исключить эти ядра из сборки (если они вам не нужны) или перенести код обратно на архитектуру compute 1.x. Я понятия не имею, возможно ли это или нет. Или найти более современное оборудование для запуска кода.