我正在编写一个CUDA内核,其中我在C ++中使用string
数据类型。但是,编译器抛出以下错误:
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数组分配空间的解决方法是什么?
答案 0 :(得分:4)
您不能在内核中使用C ++ string
类型,因为CUDA不包含可在GPU上运行的C ++ String库的设备版本。即使可以在内核中使用string
,也不是你想要做的事情,因为string
动态处理内存,这可能会很慢。
相反,创建一个固定长度字符串数组并将字符串复制到它。然后将阵列复制到GPU。将字符串数组的基址传递给内核,让每个线程通过将基于索引的偏移量添加到基址来计算给定字符串的地址。