我正在学习cuda,我想知道是否可以使用来自不同库的功能和api就像增强cuda设备代码一样。 注意:我尝试使用std :: cout,但是在我将代码生成更改为compute_20,sm_20后,我得到了printf。我正在使用Visual Studio 2010.Cuda 5.0。 GPU Nvidia GTX 570.已安装NSIght。
答案 0 :(得分:1)
Here's一个答案。这是关于语言支持的CUDA documentation。 Boost无法确定。
由于使用CUDA的目的是加速代码中的内核,因此通常需要限制使用的语言复杂性,因为增加了开销。这意味着你通常会非常接近普通的C,如果真的很方便的话只需要几个C ++。
例如Boost中的构造可能导致大量的汇编代码(并且C ++通常因此而受到批评,并且是不在实时软件中使用某些构造的原因)。这对于大多数应用程序来说都很好,但对于你想要在GPU上运行的内核来说并非如此,每个指令都很重要。
对于CUDA(或OpenCL),人们通常编写强大的算法来处理数组中的数据。例如特殊图像处理。您只能使用这些技术来执行应用程序的计算密集型任务。然后你有一个“常规”程序与用户/网络/数据库交互,创建这些CUDA任务(即选择数据和参数)并启动它们。 Here are CUDA samples.
答案 1 :(得分:1)
Boost
使用表达式模板技术,在启用更简单的语法时不会失去性能。
BlueBird和Newton是使用元编程的库,与Boost
类似,可启用CUDA
次计算。
ArrayFire是另一个使用Just in Time编译并利用下面的CUDA语言的库。
最后,正如Njuffa所建议的那样,Thrust是一个启用CUDA计算的模板库(但不使用元编程,请参阅Evaluating expressions consisting of elementwise matrix operations in Thrust)。