可以在C ++ CUDA内核中使用字符串数据类型吗?

时间:2012-03-28 15:24:26

标签: cuda gpgpu

我正在编写一个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数组分配空间的解决方法是什么?

1 个答案:

答案 0 :(得分:4)

您不能在内核中使用C ++ string类型,因为CUDA不包含可在GPU上运行的C ++ String库的设备版本。即使可以在内核中使用string,也不是你想要做的事情,因为string动态处理内存,这可能会很慢。

相反,创建一个固定长度字符串数组并将字符串复制到它。然后将阵列复制到GPU。将字符串数组的基址传递给内核,让每个线程通过将基于索引的偏移量添加到基址来计算给定字符串的地址。