【问题标题】:Can I use C++ header files in kernel part of a CUDA code?我可以在 CUDA 代码的内核部分使用 C++ 头文件吗?
【发布时间】:2011-02-01 08:41:56
【问题描述】:

我想在一个核函数中比较两个字符串。我可以在文件中使用 strcomp 吗? 一般来说,我可以在我的 CUDA 代码中使用 C++ 库吗?

【问题讨论】:

  • 不——如果你觉得你需要这样做,那你就做错了——你到底想用你的 CUDA 内核实现什么?
  • 使用大量线程在单词图中进行搜索。它们中的每一个根据比较目标词和当前节点的词来决定下一步。所以,我认为他们每个人都需要在每一步中比较这两个字符串。
  • 这种类型的应用程序的问题是您的warp 将高度发散,因为每个线程将通过一堆分支遵循不确定的路径。我看不出这是非常有效的。你确定在 GPU 上这样做值得吗?
  • 如果我使用纹理内存会怎样。我在某处读到它更适合非合并的内存读数。

标签: c++ c cuda


【解决方案1】:

如果 CUDA 库包含 C++ 标准库的内核端版本,您将需要它才能使其工作,因为(正如 Paul R 在评论中指出的),this 和许多其他标准函数不是特别适合 GPU 加速。

根据 CUDA 语言规则,只能从设备调用 __device__ 函数。 strcmp 之类的函数在 C++ 标准库中没有声明为 __device__,所以如果 CUDA 语言不包含它们作为扩展——它没有,因为 CUDA 编程指南不包含它们的任何文档—— - 那么它们就不能在内核中使用。

当你尝试的时候发生了什么?

【讨论】:

  • 我现在正在收集信息。我正在用 C++ 编写代码,之后想将其更改为 CUDA。
猜你喜欢
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2017-07-28
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多