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