Используйте clang-tidy для исходных файлов CUDA
Существует несколько инструментов статического анализа, разработанных для C/C++, но они не особенно полезны для тестирования источников CUDA.
Поскольку clang версии 6 способен компилировать CUDA, я хотел проверить, какие у меня варианты с использованием clang-tidy, который, похоже, не имеет опции для переключения архитектур.
Есть ли способ заставить его работать? Например, переключатель времени компиляции для включения синтаксического анализатора CUDA, расширение в форме пользовательской проверки или это запланированная функция?
0 ответов
Одна из проблем инструментов на основе clang заключается в том, что они не выполняют синтаксический анализ файлов точно так же, как это делает clang.
Первая проблема заключается в том, что в отличие от компиляции C/C++, компиляция CUDA компилирует исходный код несколько раз. По умолчанию clang создает несколько заданий компиляции, когда вы даете ему файл CUDA, и это отключает многие инструменты, которые ожидают только одну компиляцию. Для того чтобы обойти это нужно пройти --cuda-host-only
вариант лязгать.
Вам также может понадобиться пройти --cuda-path=/path/to/your/CUDA/install/root
поэтому Clang может найти заголовки CUDA.
Другая проблема, с которой вы можете столкнуться, связана с включением путей. Производные от Clang инструменты не имеют тех же стандартных путей включения, которые использует сам Clang, что иногда вызывает странные проблемы. По крайней мере, Clang-Tidy необходимо найти __clang_cuda_runtime_wrapper.h
который устанавливается вместе с лязгом. Если вы бежите clang-tidy your-file.c -- -v
он будет печатать аргументы clang и включать пути поиска, которые он использует. Сравните это с чем clang -x c /dev/null -fsyntax-only -v
печать. Возможно, вам придется дать clang-tidy
дополнительные пути включения, чтобы соответствовать тем, которые используются clang
сам. Обратите внимание, что вы не должны явно добавлять путь к включенным CUDA здесь. Он будет добавлен в нужном месте автоматически --cuda-path=...
,
После того, как все будет готово, clang-tidy должен работать с файлами CUDA.
Что-то вроде этого:clang-tidy your-file.cu -- --cuda-host-only --cuda-path=... -isystem /clang/includes -isystem /extra/system/includes