#macros #cuda #nvcc
#макросы #cuda #nvcc
Вопрос:
Обычно в gcc вы можете указать уровень отладочной информации с помощью -g, и если вы используете -g3, это будет включать определения макросов препроцессора в исполняемый файл, который отладчики, такие как gdb, могут прочитать и разрешить вам использовать во время отладки. Я хотел бы сделать это с помощью nvcc для отладки программ CUDA.
В настоящее время я работаю над изменением программы-шаблона в SDK, поэтому я использую Makefile по умолчанию и common.mk включено из файла Makefile. В common.mk в блоке ‘ifeq ($(dbg), 1)’ я попробовал следующее:
- поместите -g3 в COMMONFLAGS
- поместите -g3 в NVCCFLAGS
- поместите -g3 в CXXFLAGS и CFLAGS
- поместите —compiler-options -g3 в NVCCFLAGS.
Первые два выдают ошибку нераспознанного параметра. Вторые два, похоже, не помогают, потому что при отладке с использованием cuda-gdb я не получаю информацию о макросе.
Причина, по которой я хотел бы это сделать, заключается в том, что я хотел бы проверить некоторую память, используя те же макросы, которые сама программа использует для доступа к этой памяти. Например,
#define ARROW(state, arrow) ((c_arrow_t *)(amp;((state)->arrows) (arrow) * sizeof(c_arrow_t)))
#define STATE(nfa, state) ((c_state_t *)(amp;((nfa)->states) (state) * sizeof(c_state_t)))
вот некоторые макросы, которые я использую для доступа к состояниям и стрелкам недетерминированного конечного автомата.
Спасибо за вашу помощь!
Ответ №1:
Вероятно, вам нужно передать оба параметра -g в nvcc, чтобы настроить его на сборку с отладкой на хосте, и также передать -g3 компилятору хоста через -Xcompiler (или —compiler-options).
Просто наблюдение, но вам действительно не следует использовать этот SDK makefile ни для чего. Это действительно зло — грубый взломанный на некоторых автоинструментах способ создания инструкций make, который является одновременно излишне сложным и очень негибким. Даже разработчики NVIDIA, с которыми я взаимодействую, предупреждают не использовать его.