Я начал использовать библиотеку NVidia Thrust, которая входит в набор инструментов CUDA 4.0, и хотел что-то проверить, прежде чем копать глубже. Я могу выполнить следующее, и во время сборки у меня не возникнет проблем:
thrust::host_vector <int> iVec;
thrust::device_vector <int> iVec2;
thrust::host_vector <std::string> sVec;
Когда я пытаюсь сделать следующее, я получаю сообщение об ошибке компиляции:
thrust::device_vector <std::string> sVec2;
Я хотел бы знать, могу ли я предположить, что любой тип данных, который я могу использовать в векторе STL, должен использоваться в векторе тяги независимо от того, устройство это или хост? Или здесь есть ограничения, и я не должен ожидать, что это сработает?
Я получаю следующую ошибку:
Здесь я использую MSCV 2010.
CUDA не поддерживает стандартные типы контейнеров C ++ в коде устройства, в основном он ограничен только типами C ++ POD. Вы можете определить свои собственные классы для использования в графическом процессоре, но конструктор и функции-члены должны быть определены как функции CUDA
thrust::host_vector <int> iVec;
thrust::device_vector <int> iVec2;
thrust::host_vector <std::string> sVec;
, и все еще существует ряд ограничений на то, какие языковые функции поддерживаются в коде устройства.