【问题标题】:Change all CUDA functions to __host__ __device__将所有 CUDA 函数更改为 __host__ __device__
【发布时间】:2013-04-23 06:04:16
【问题描述】:

我想在 CUDA 中使用一个存在的函数,但它包含许多类和其他函数。 在每个函数之前添加__host__ __device__ 是微不足道的。那么,有没有一种自动方法可以做到这一点?或者如何让nvcc编译所有函数为__device__ __host__

【问题讨论】:

  • 总之,没有自动的方法可以做到这一点。但是正如您自己指出的那样,用__device__装饰您需要的功能是微不足道的,那么问题是什么?
  • 好的...我想我可以写一个来做这个...
  • 如果有很多现有的类和函数,最好修改它们并创建一个 GPU 特定的解决方案,而不是把所有东西都搞定__device__
  • 我认为这是nvcc 的愚蠢限制。我知道编译为目标代码的函数需要知道它们的目标代码。但是内联函数或按需编译的函数(在实例化时),如成员函数或模板函数应该自动为__device__和/或__host__,如果它们被这样调用并且也可以(类似SFINAE)编译为这样的。我认为目前的情况很疯狂,我不能等到一些 nvcc 包装器或 nvcc 或 clang 自动完成。

标签: c++ c cuda


【解决方案1】:

基本上,GPU 编程是关于大规模并行的。它与普通的单线程编程完全不同。 除非您只想将这些函数同时应用于大型数组的各个元素,否则将其编码到 GPU 中没有任何好处。 事实上,GPU 核心时钟比你的处理器慢得多。 如果您将主要针对单线程风格的 CPU 编写的函数编译到 GPU,您将获得潜在的性能损失。 您需要将您的问题重新考虑到 GPU 范式中。

【讨论】:

  • 一般来说你可能是对的。但实际上它是关于机器学习的,我使用 min-max-modular 来并行数据,这样它就可以在不改变算法的情况下并行训练,而且我有一种方法可以整合结果。它应该在多 CPU 而不是 GPU 中运行。但是由于某种原因,我别无选择..
猜你喜欢
  • 2016-01-18
  • 2020-10-29
  • 2015-12-10
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多