【发布时间】:2012-03-28 15:24:25
【问题描述】:
我正在编写一个 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 数组分配空间的解决方法是什么?
【问题讨论】:
-
在内核函数中使用 C 字符串
-
@PaulR:假设我将一个 C++ 字符串数组传递给我的内核。 CUDA 没有抱怨这一点。如何将其转换为内核中的 C 字符串。请举例
-
您只需将底层数据传递给内核——使用
string::c_str()方法在宿主代码中提取指向C数据的指针并将这些指针传递给内核函数 -
保罗:这还不够。底层 char 数组 (c_str) 需要复制到设备内存中。
-
@Ashwin:您能否举个例子详细说明一下。我不知道保罗说了什么