Я просматриваю пример кода CUDA, пытаясь лучше понять, как работает NVRTC. В заголовочном файле nvrtc_helper.h есть функция с именем compileFileToPTX
. В нем они используют NVRTC, чтобы JIT компилировать функцию (указанную через путь к файлу) в PTX. Конвейер для использования nvrtc выглядит следующим образом:
nvrtcCreateProgram
-> nvrtcCompileProgram
-> nvrtcGetPTX
-> nvrtcDestroyProgram
В документации для nvrtcCreateProgram
указано, что если ваш кодсодержит файлы заголовков, чтобы включить их в скомпилированную программу, вы должны извлечь исходный код каждого файла заголовков и передать исходный код в nvrtcCreateProgram
вместе с именами заголовков. В nvrtc_helper.h они жестко кодируют в 0, NULL, NULL
для аргументов заголовка в nvrtcCreateProgram
. Однако один из примеров, похоже, содержит заголовочный файл, который необходимо включить. Насколько я могу судить, они используют nvrtcCompileProgram
и передают аргумент компилятора --include-path=
в файл заголовка вместо передачи источника файла заголовка в nvrtcCreateProgram
.
Мое пониманиеневерно и есть ли разница между любым из двух подходов к включению заголовочных файлов?