Используйте 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

Другие вопросы по тегам