在cuda设备代码中使用类似boost的库

Using libraries like boost in cuda device code

本文关键字:boost 的库 cuda 代码      更新时间:2023-10-16

我现在正在学习cuda,我想知道是否可以在cuda设备代码中使用来自不同库的函数和类似boost的api。注意:我尝试过使用std::cout,但没有成功。在将代码生成更改为compute_20、sm_20后,我得到了printf。我正在使用Visual Studio 2010。Cuda 5.0。GPU Nvidia GTX 570。NSIght已安装。

以下是答案。这是CUDA关于语言支持的文档。Boost不能确定。

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

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

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

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

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

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

最后,正如Njuffa所建议的,Thrust是一个支持CUDA计算的模板库(但不使用元编程,请参阅Thrust中评估由元素矩阵运算组成的表达式)。