【发布时间】: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 已安装。
【问题讨论】:
我目前正在学习 cuda,我想知道是否可以在 cuda 设备代码中使用来自不同库和 api 的函数,例如 boost。 注意:我尝试使用 std::cout 并没有工作我在将代码生成更改为 compute_20,sm_20 后让 printf 工作。我正在使用 Visual Studio 2010。Cuda 5.0。 GPU Nvidia GTX 570。NSLight 已安装。
【问题讨论】:
Here's 一个答案。这是关于语言支持的CUDA documentation。 Boost 肯定不会成功。
由于使用 CUDA 的目的是加速代码中的内核,因此您通常希望限制所使用的语言复杂性,因为会增加开销。这意味着您通常会非常接近纯 C,如果真的很方便,只需少量 C++。
例如 Boost 中的构造可能会导致大量汇编代码(C++ 通常因此受到批评,这是在实时软件中不使用某些构造的原因)。这对于大多数应用程序来说都很好,但对于您希望在 GPU 上运行的内核来说,每条指令都很重要。
对于 CUDA(或 OpenCL),人们通常会编写密集的算法来处理数组中的数据。例如特殊的图像处理。您仅使用这些技术来执行应用程序的计算密集型任务。然后你有一个“常规”程序,它与创建这些 CUDA 任务(即选择数据和参数)并启动它们的用户/网络/数据库交互。 Here are CUDA samples.
【讨论】:
Boost 使用表达式模板技术在启用更简单语法的同时不降低性能。
BlueBird 和Newton 是使用元编程的库,类似于Boost,支持CUDA 计算。
ArrayFire 是另一个使用即时编译并利用底层 CUDA 语言的库。
最后,正如 Njuffa 所建议的,Thrust 是一个支持 CUDA 计算的模板库(但不使用元编程,请参阅Evaluating expressions consisting of elementwise matrix operations in Thrust)。
【讨论】: