Я никогда не использовал CUDA или C ++ раньше, но я пытаюсь получить Ramses GPU от (http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html Бег.
Из-за ошибки в autogen.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, а также все остальное, если вам это нужно.
Спасибо за помощь!
Код, который вы компилируете, требует статического выделения 28880 байт (0x70d0) разделяемой памяти на блок. Для вычислительных возможностей 2.x и более новых графических процессоров это не проблема, поскольку они поддерживают до 48 КБ общей памяти. Однако для устройств с вычислительной возможностью 1.x ограничение общей памяти составляет 16 КБ (и до 256 байт из этого может быть использовано аргументами ядра). Из-за этого код не может быть скомпилирован для устройств compute 1.x, и компилятор выдает сообщение об этом. Таким образом, ошибка возникает из-за указания sm_13/compute_13
компилятору. Вы можете удалить это, и сборка должна работать.
Однако становится еще хуже. Tesla C1060 — это устройство с вычислительной способностью 1.3. В результате вы не сможете скомпилировать и запустить эти ядра на своих графических процессорах. Нет другого решения, кроме как исключить эти ядра из сборки (если они вам не нужны) или перенести код обратно на архитектуру compute 1.x. Я понятия не имею, возможно ли это или нет. Или найти более современное оборудование для запуска кода.