【问题标题】:Using libraries like boost in cuda device code在 cuda 设备代码中使用诸如 boost 之类的库
【发布时间】:2013-07-13 08:28:46
【问题描述】:

我目前正在学习 cuda,我想知道是否可以在 cuda 设备代码中使用来自不同库和 api 的函数,例如 boost。 注意:我尝试使用 std::cout 并没有工作我在将代码生成更改为 compute_20,sm_20 后让 printf 工作。我正在使用 Visual Studio 2010。Cuda 5.0。 GPU Nvidia GTX 570。NSLight 已安装。

【问题讨论】:

    标签: c++ c boost cuda


    【解决方案1】:

    Here's 一个答案。这是关于语言支持的CUDA documentation。 Boost 肯定不会成功。

    由于使用 CUDA 的目的是加速代码中的内核,因此您通常希望限制所使用的语言复杂性,因为会增加开销。这意味着您通常会非常接近纯 C,如果真的很方便,只需少量 C++。

    例如 Boost 中的构造可能会导致大量汇编代码(C++ 通常因此受到批评,这是在实时软件中不使用某些构造的原因)。这对于大多数应用程序来说都很好,但对于您希望在 GPU 上运行的内核来说,每条指令都很重要。

    对于 CUDA(或 OpenCL),人们通常会编写密集的算法来处理数组中的数据。例如特殊的图像处理。您仅使用这些技术来执行应用程序的计算密集型任务。然后你有一个“常规”程序,它与创建这些 CUDA 任务(即选择数据和参数)并启动它们的用户/网络/数据库交互。 Here are CUDA samples.

    【讨论】:

    • 如果这个问题听起来很新手,请原谅我的编程经验很少。如果您不能将其他库与 Cuda 一起使用,那么您为什么要使用它。如果可以,请提供一个真实世界的示例或应用程序。
    • @user1721803 查看我的答案的扩展。
    • 如果您更喜欢在 CUDA 中使用模板库,您可能需要查看 Thrust:docs.nvidia.com/cuda/thrust。要了解人们使用 CUDA 实现了哪些类型的项目和产品,请查看 CUDA 展示:nvidia.com/object/cuda-apps-flash-new.html#
    【解决方案2】:

    Boost 使用表达式模板技术在启用更简单语法的同时不降低性能。

    BlueBirdNewton 是使用元编程的库,类似于Boost,支持CUDA 计算。

    ArrayFire 是另一个使用即时编译并利用底层 CUDA 语言的库。

    最后,正如 Njuffa 所建议的,Thrust 是一个支持 CUDA 计算的模板库(但不使用元编程,请参阅Evaluating expressions consisting of elementwise matrix operations in Thrust)。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2019-01-05
      • 2015-09-09
      • 2018-08-08
      • 1970-01-01
      • 2021-08-16
      • 2020-09-23
      • 2020-01-06
      相关资源
      最近更新 更多