Есть ли список заголовков, которые можно использовать в строке для компиляции с NVRTC?

(Используя компилятор времени выполнения NVRTC)

Есть строка функции CUDA:

R"(
        extern "C" __global__ void test1(float * a, float * b, float *c)
        {
            int id= blockIdx.x * blockDim.x + threadIdx.x;
            c[id]=a[id]+b[id];
        }
)"

который успешно компилируется драйвером API в код ptx и используется в программе для вычисления c=a+b.

Но когда я пытаюсь заголовок включить алгоритм

R"(
        #include <climits>

        extern "C" __global__ void test1(float * a, float * b, float *c, int * gpuOffset)
        {
            int id=blockIdx.x * blockDim.x + threadIdx.x;
            device_vector<int> dv;
            c[id]=a[id]+b[id];
        }


)"

он возвращает сообщение об ошибке

test1.cu(23): catastrophic error: cannot open source file "climits"

1 catastrophic error detected in the compilation of "test1.cu".
Compilation terminated.

или же

test1.cu(28): error: identifier "device_vector" is undefined

в зависимости от класса заголовка include или (например, device_vector).

Также документация показывает, что как cuFFT, так и thrust могут использоваться только на стороне хоста, и кажется, что я не могу использовать какой-либо "частичный" алгоритм, который я хотел бы использовать в каждом блоке потока независимо.

Есть ли список заголовков для некоторых поддерживаемых cuda алгоритмов, которые будут использоваться в качестве блока:

R"(
        #include "driver_api_fft.h"
        #include "driver_api_ifft.h"
        extern "C" __global__ void test1(float * a, float * b, float *c)
        {
            int id=blockIdx.x * blockDim.x + threadIdx.x;
            fft(a,id,1024);
            ifft(b,id,1024);
            c[id]=a[id]+b[id];
        }
)"

успешно скомпилировать и запустить на любой целевой машине, или можно ли связать эти библиотеки алгоритмов (thrust for device_vector) с ptx-компоновщиком со стороны хоста, чтобы я мог каким-то образом использовать их из скомпилированного ядра? Если это невозможно, то нужно ли мне самому написать преобразование Фурье и сделать его "быстрым", реализовав алгоритмы самостоятельно?

0 ответов

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