Используйте clang-tidy для исходных файлов CUDA

Существует несколько инструментов статического анализа, разработанных для C / C ++, но они не особенно полезны для тестирования источников CUDA.

поскольку лязг версия 6 В состоянии скомпилировать CUDA, я хотел проверить, какие у меня есть варианты с использованием clang-tidy, который, похоже, не имеет опции для переключения архитектур.

Есть ли способ заставить его работать? Например, переключатель времени компиляции для включения синтаксического анализатора CUDA, расширение в форме пользовательской проверки или это запланированная функция?

4

Решение

Одна из проблем с инструментами на основе 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

1

Другие решения

Других решений пока нет …