goo*_*ons 34 c++ cuda gpu gpu-programming
我一直在寻找C++的库/扩展,它将允许基于GPU的高级处理.我不是GPU编程方面的专家,我不想深入挖掘.我有一个由具有虚函数的类组成的神经网络.我需要一个基本上为我分配GPU的库 - 在很高的层次上.有一个人在一个名为GPU ++的系统上写了一篇论文,它为你做了大部分的GPU工作.我找不到任何地方的代码,只是他的论文.
有没有人知道类似的库,或者有没有人有GPU ++的代码?像CUDA这样的库太低了,无法处理我的大多数操作(至少在没有重写我的所有进程和算法的情况下 - 我不想这样做).
Ben*_*enC 47
有许多专门用于GPGPU编程的高级库.由于它们依赖于CUDA和/或OpenCL,因此必须明智地选择它们(基于CUDA的程序不会在AMD的GPU上运行,除非它通过诸如gpuocelot之类的项目进行预处理步骤).
您可以在NVIDIA 网站上找到一些CUDA库的示例.
Thrust是一个类似于C++标准模板库(STL)的并行算法库.Thrust的高级接口极大地提高了程序员的工作效率,同时实现了GPU和多核CPU之间的性能可移植性.与已有技术(如CUDA,TBB和OpenMP)的互操作性有助于与现有软件集成.
正如@Ashwin指出的那样,Thrust的类似STL的语法使其成为开发CUDA程序时广泛选择的库.快速查看这些示例,可以看出如果您决定使用此库,您将编写的代码类型.NVIDIA的网站介绍了该库的主要功能.一个视频演示(从GTC 2012)也可用.
CUB为CUDA编程模式的每一层提供最先进的可重用软件组件.它是一个灵活的协作线程块原语库和CUDA内核编程的其他实用程序.
它提供设备范围,块宽和整个经线的并行原语,如并行排序,前缀扫描,缩减,直方图等.
它是开源的,可在GitHub上获得.从实现的角度来看,它不是高级的(您在CUDA内核中开发),但提供了高级算法和例程.
该库主要用于机器学习,并依赖于表达式模板.
从Eigen 3.3开始,现在可以在CUDA内核中使用Eigen的对象和算法.但是,仅支持一部分功能,以确保在CUDA内核中不会触发动态分配.
请注意,OpenCL不仅仅是GPGPU计算,因为它支持异构平台(多核CPU,GPU等).
OpenACC应用程序接口描述了一组编译器指令,用于指定标准C,C++和Fortran中的循环和代码区域,从主机CPU卸载到连接的加速器,提供跨操作系统,主机CPU和加速器的可移植性.
Bolt是一个针对异构计算而优化的C++模板库.Bolt旨在为常见算法(如扫描,缩减,转换和排序)提供高性能库实现.Bolt接口是在C++标准模板库(STL)上建模的.熟悉STL的开发人员将认识到许多Bolt API和定制技术.
Boost.Compute:正如 @Kyle Lutz所说,Boost.Compute为OpenCL提供类似STL的接口.请注意,这不是官方的Boost库(尚未).
SkelCL "是一个提供高级抽象的库,用于缓解现代并行异构系统的编程".该库依赖于骨架编程,您可以在他们的研究论文中找到更多信息.
虽然这不是这个问题的范围,但对其他编程语言也有同样的支持:
如果您需要进行线性代数(例如)或其他特定操作,专用数学库也可用于CUDA和OpenCL(例如ViennaCL,CUBLAS,MAGMA等).
另请注意,如果需要执行一些非常具体的计算,使用这些库不会阻止您执行某些低级操作.
最后,我们可以提到C++标准库的未来.已经进行了大量工作来增加并行性支持.这仍然是一个技术规范,并没有明确提到GPU AFAIK(尽管NVIDIA的Thrust开发商Jared Hoberock直接参与其中),但是实现这一目标的意愿绝对存在.
Kyl*_*utz 15
看看Boost.Compute.它提供了一个高层次,STL类似的接口,包括类似容器vector<T>和类似的算法transform()和sort().
它基于OpenCL,允许在大多数现代GPU和CPU上运行,包括NVIDIA,AMD和Intel的GPU.
| 归档时间: |
|
| 查看次数: |
32499 次 |
| 最近记录: |