我正在编写一个 CUDA 内核,我在其中使用stringC++ 中的数据类型。但是,编译器抛出以下错误:
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
Run Code Online (Sandbox Code Playgroud)
内核中不允许使用字符串吗?如果没有,在内核中为字符数组分配空间的解决方法是什么?
Rog*_*ahl 10
您不能string在内核中使用 C++类型,因为 CUDA 不包含可以在 GPU 上运行的 C++ 字符串库的设备版本。即使可以string在内核中使用,这也不是您想要做的事情,因为string动态处理内存可能会很慢。
相反,创建一个固定长度的字符串数组并将这些字符串复制到其中。然后将数组复制到 GPU。将字符串数组的基地址传递给内核,并让每个线程通过将基于其索引的偏移量添加到基地址来计算给定字符串的地址。
| 归档时间: |
|
| 查看次数: |
7966 次 |
| 最近记录: |