Я пытаюсь использовать свои классы С++ в CUDA.
У меня есть класс как таковой:
#include<string>
#include<stdlib.h>
class exampleClass{
int i;
__host__ __device__ exampleClass(int _i):i(_i){};
__host__ __device__ void increment(){i++;}
__host__ __device__ string outputMessage(return itoa(i);}
};
Я установил это в файле .cu и установил для компиляции CUDA c/С++
Это не скомпилируется с помощью nvcc, потому что у cuda нет строк.
Я хотел бы сохранить только функции CUDA, выполнив что-то вроде:
#ifndef __CUDA_ARCH__
#include<string>
#endif
#include<stdlib.h>
class exampleClass{
int i;
__host__ __device__ exampleClass(int _i):i(_i){};
__host__ __device__ void increment(){i++;}
#ifndef __CUDA_ARCH__
string outputMessage(return itoa(i);}
#endif
};
Но я знаю, что это не работает... по крайней мере, это не работает для меня. Nvcc не нравится ни включение строки, ни, очевидно, функция, требующая строкового типа.
Извините, если пример не первоклассный. Подводя итог, я бы хотел, чтобы члены основного класса выполнялись на CUDA, сохраняя при этом возможность иметь причудливые хост-операции для анализа и вывода на стороне хоста.
ОБНОВЛЕНИЕ. Моей конечной целью здесь является создание базового класса, содержащего несколько типов указателей на несколько полиморфных классов. Сам этот базовый класс будет производным. Я думал, что это возможно в CUDA5.0. Я ошибаюсь?