【问题标题】:CUDA with map<value, key> & atomic operations具有 map<value, key> 和原子操作的 CUDA
【发布时间】:2011-01-22 01:34:27
【问题描述】:

据我所知,我可以在 CUDA 设备代码中使用 C++ 模板。那么如果我使用 map 来创建字典,插入新值的操作会是原子的吗?

我想计算某个值的出现次数,即创建一个包含代码概率的代码字典。

谢谢

Mac

【问题讨论】:

  • 我很确定 CUDA 使用自己的 C 变体和 instristics。那么没有模板。
  • forums.nvidia.com/index.php?showtopic=98087 声明“您可以在设备代码中使用模板”
  • @macs:那是我今天学到的新东西。 :) 我认为,这些操作是否是原子操作取决于实现,因此您必须找到有关 nVidia 保证的资源。
  • @GMan:好吧,我会试一试,然后告诉你结果:D
  • @GMan 你可以使用模板和继承。我肯定知道,因为我确实成功地使用了它们

标签: c++ templates dictionary cuda


【解决方案1】:

您不能在设备代码中使用 STL。您可以检查 thrust 以获得类似的功能(特别是检查实验性命名空间)。

模板可以在设备代码中使用,CUDA C 目前支持相当多的 C++ 功能,尽管虚拟功能和异常等一些大功能尚不可用(并且只能在 Fermi 硬件上实现)。

如果您决定自己实现此功能,可以使用 atomicAdd() 内部函数来获取原子操作,请查看CUDA Programming Guide 了解更多信息。

【讨论】:

  • 只是分配器使 STL 与 CUDA 不兼容吗?如果我们要编写自己的分配器,我们可以在 CUDA 中使用 STL 吗?
  • 就是,我想知道的……又学了一句:下次我会提示STL。
  • 我在 Thrust 中没有发现任何提供与 std::map 相媲美的功能。我没有看到任何允许类似字典的查找,例如int value = myMap["key"]
【解决方案2】:

如果我正确理解您的问题,您是否正在尝试在 cuda 中使用 STL 映射? 很可能它不会工作。您将不得不设计自己的实现。 但是,您也许可以在推力库中找到实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2012-01-25
    • 2012-07-31
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多