Есть ли список заголовков, которые можно использовать в строке для компиляции с 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-компоновщиком со стороны хоста, чтобы я мог каким-то образом использовать их из скомпилированного ядра? Если это невозможно, то нужно ли мне самому написать преобразование Фурье и сделать его "быстрым", реализовав алгоритмы самостоятельно?