В частности, моя проблема в том, что у меня есть код CUDA, для которого требуется <curand_kernel.h>
. Это не включено по умолчанию в NVRTC. Предположительно тогда при создании контекста программы (т. Е. Вызова nvrtcCreateProgram
) мне нужно отправить имя файла (curand_kernel.h
), а также исходный код curand_kernel.h
? Я чувствую, что мне не нужно это делать.Как вы включаете стандартные библиотеки CUDA для связи с кодом NVRTC?
Трудно сказать; Мне не удалось найти пример из NVIDIA для кого-то, нуждающегося в стандартных файлах CUDA, подобных этому в качестве источника, поэтому я действительно не понимаю, что такое синтаксис. Некоторые вопросы: curand_kernel.h
также включает в себя ... Нужно ли делать то же самое для каждого из них? Я даже не уверен, что компилятор NVRTC будет работать нормально на curand_kernel.h
, потому что есть некоторые особенности языка, которые он не поддерживает, не так ли?
Далее: если вы отправили исходный код файла заголовка в nvrtcCreateProgram
, я все еще должен #include
его в коде, который будет выполняться, или это приведет к ошибке, если я это сделаю?
Ссылка на пример кода, который делает это или что-то в этом роде, будет оценен гораздо больше, чем простой ответ; Мне действительно не удалось найти.
Хммм. Поэтому я подумываю о том, как я это делаю. Предварительная компиляция кода, который использует curand в PTX, не представляется возможным ... Предварительно генерирующие поплавки на процессоре невозможны, потому что их должно быть слишком много ... Поэтому я остаюсь работать через библиотеку curand чтобы получить детали, которые мне нужно скомпилировать с помощью NVRTC, и найти другую реализацию rand. Как все, что мне действительно нужно от curand, является стандартным унифицированным PRNG от 0 до 1, я думаю, что решение - найти другой PRNG, который проще скомпилировать с использованием NVRTC, спасибо! –
Хм. Реализации ГРП ГПУ трудно найти. Возможно, мне придется каким-то образом адаптировать CURAND ... –
@BillySmith Самое прямое решение - построить большой буфер и заполнить его с помощью rand() или аналогичной процессорной стороны, а затем загрузить его на хост. Храните индексную переменную, указывающую, какое значение находится в буфере. Когда вы попадаете в конец буфера, промойте и повторите. –