Я пишу одну библиотеку заголовков, которая выполняет ядро cuda. Мне было интересно, есть ли способ обойти синтаксис < < >>> или получить исходный код C из nvcc?Могу ли я использовать cuda без использования nvcc в моем хост-коде?
ответ
Вы можете избежать расширения языка хоста, используя вместо этого CUDA driver API. Это немного более многословно, и для управления контекстом вам потребуется немного более шаблонный код, но это не слишком сложно.
Обычно вы собираете PTX или бинарную полезную нагрузку для загрузки во время выполнения, однако теперь NVIDIA также отправляет экспериментальную библиотеку компилятора JIT CUDA C, libNVVM, которую вы можете попробовать, если хотите использовать JIT из источника.
Если вы все еще хотите полагаться на API времени выполнения, недостаточно: использовать cuLaunchKernel в коде хоста, вручную включить правильные заголовки времени выполнения, использовать nvcc для соединения устройства и кода хоста? – pszilard
@pszilard: Нет. API времени выполнения основан на множестве шаблонов, созданных nvcc, и нескольких недокументированных вызовах API, чтобы сделать работу инициализации ленивого контекста. Если вы не используете nvcc для компиляции, вы не получите этого, и ничего не получится. Если вы не используете API-интерфейс драйвера и явно управляете контекстом и модулями самостоятельно. – talonmies
Вы можете избежать необходимости вызывать nvcc, компилируя ядро в файл CUBIN или PTX, и загрузите и выполните это с помощью API-интерфейса драйвера, в конечном итоге заменив синтаксический вызов ' >>' API среды выполнения с вызовом [ 'cuLaunchKernel'] (http://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXEC.html#group__CUDA__EXEC_1gb8f3dc3031b40da29d5f9a7139e52e15). (Если этого достаточно, я бы немного его разработал и преобразовал в ответ) – Marco13
Ответ на один предложение - «использовать API-интерфейс драйвера CUDA». – talonmies
Спасибо, это было то, что я искал! –