2012-03-28 111 views
1

我正在编写一个CUDA内核,其中我正在使用C++中的string数据类型。但是,编译器会抛出以下错误:可以在C++ CUDA内核中使用字符串数据类型吗?

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

在内核函数中使用C字符串 – 2012-03-28 15:26:29

+0

@PaulR:假设我传递一个C++字符串数组到我的内核。 CUDA不会抱怨这一点。我如何将其转换为内核中的C字符串。请举例 – Programmer 2012-03-28 15:32:50

+0

您只需将基础数据传递给内核 - 使用'string :: c_str()'方法提取指向主机代码中C数据的指针并将它们传递给内核函数 – 2012-03-28 15:44:38

回答

4

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

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

相关问题