在cuda设备代码中使用类似boost的库
Using libraries like boost in cuda device code
我现在正在学习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中评估由元素矩阵运算组成的表达式)。
- "Body requirements not met"将 req 传递给 c++ 中的方法(Boost Beast 库)
- 无法在Windows中找到来自cmake的MySQL和Boost包含/库
- 如何在Boost Graph库中的Grid_graph的边缘添加自定义属性
- 最新版本的 Boost asio 库中缺少方法的替代方法
- 使用由 Mingw 5.3 编译的 boost ASIO 库使用 QT 时出错
- 在Linux上用于Windows的Linux上的Boost Fiber库
- 在Boost Graph库中选择给定顶点的随机进出邻居的有效方法
- 如何使用Boost Graph库使用循环中的循环设置相同的边缘重量
- 为使用boost的预开发库构建c++包装器时未解决的外部问题
- 如何与CMAKE一起使用VS 2017编译的Boost Filesystem库
- Boost Graph库中边缘的随机访问(或其他快速访问)
- 为什么Boost Numeric库通过使用调试或发布模式给出不同的结果
- 带有Boost Regex库的未解决的外部对象
- 链接ubuntu 14.04中的boost文件系统和boost iostream库
- 使用C Boost Odeint库的二阶微分方程
- 围绕Boost图库中的捆绑属性进行设计
- Fruchterman-Reingold的吸引力是如何与Boost图库协同工作的
- 在使用 BOOST 图形库生成的图形中添加随机边
- 要链接到用户boost::intrusive_ptr的库
- 在cuda设备代码中使用类似boost的库