在cuda设备代码中使用诸如boost之类的库

时间:2013-07-13 08:28:46

标签: c++ c boost cuda

我正在学习cuda,我想知道是否可以使用来自不同库的功能和api就像增强cuda设备代码一样。 注意:我尝试使用std :: cout,但是在我将代码生成更改为compute_20,sm_20后,我得到了printf。我正在使用Visual Studio 2010.Cuda 5.0。 GPU Nvidia GTX 570.已安装NSIght。

2 个答案:

答案 0 :(得分:1)

Here's一个答案。这是关于语言支持的CUDA documentation。 Boost无法确定。

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

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

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

答案 1 :(得分:1)

Boost使用表达式模板技术,在启用更简单的语法时不会失去性能。

BlueBirdNewton是使用元编程的库,与Boost类似,可启用CUDA次计算。

ArrayFire是另一个使用Just in Time编译并利用下面的CUDA语言的库。

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