Можно ли использовать строковые типы данных в ядрах C ++ CUDA? - PullRequest
1 голос
/ 28 марта 2012

Я пишу ядро ​​CUDA, в котором я использую тип данных string в C ++.Однако компилятор выдает следующую ошибку:

error: calling a host function("std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator =") from a __device__/__global__ function("doDecompression") is not allowed

Разрешены ли строки в ядре?если нет, то какой обходной путь для выделения пространства для массива char в ядре?

1 Ответ

4 голосов
/ 29 марта 2012

Вы не можете использовать тип C ++ string в ядре, потому что CUDA не включает версию устройства библиотеки C ++ String, которая могла бы работать на GPU. Даже если бы можно было использовать string в ядре, это не то, что вы хотели бы сделать, потому что string обрабатывает память динамически, что, вероятно, будет медленным.

Вместо этого создайте массив строк фиксированной длины и скопируйте в него строки. Затем скопируйте массив в графический процессор. Передайте базовый адрес массива строк вашему ядру и попросите каждый поток вычислить адрес для данной строки, добавив смещение на основе его индекса к базовому адресу.

...