12.4_代码资源

12.4 代码资源

尽管NVIDIA GPU Computing SDK中包含了大量的示例代码,但这些代码通常只适合用于教学。如果你希望获得一些产品级别的源代码或者库,那么还需要更进一步。幸运的是,在CUDA开发人员社区中提供了各种非常棒的解决方案。在本书中介绍了其中一些工具和库,但你也可以在网页上搜索需要的解决方案。当然,在将来某天你也可以为CUDA C社区做出自己的贡献!

12.4.1 CUDA数据并行原语库

在加州大学戴维斯分校的研究人员的帮助下,NVIDIA公布了CUDA数据并行原语库(CUDA Data Parallel Primitives Library, CUDA)。从名字可以看出,CUDPP包含的是一组数据并行算法原语。例如,并行前缀求和(扫描),并行排序以及并行归约等。这些原语为许多数据并行算法提供了重要的基础,包括排序、流压缩、构建数据结构以及其他并行算法等。如果你正在编写某个复杂的算法,那么很可能CUDPP已经提供了这个算法,或者提供了算法的大部分功能。CUDPP的下载地址为http://code.google.com/p/cudpp。

12.4.2 CULAtools

在12.2.3节中曾提到,在CUDA工具箱中包含了对BLAS的实现。如果读者需要更多的线性代数函数库,那么可以看看EM Photonics公司基于CUDA实现的线性代数(LAPACK)库。这个库也称为CLUAtools,它包含了许多更为复杂的线性代数函数,这些函数都是基于NVIDIA的CUBLAS技术构建。在免费的基本版本中包含了LU矩阵分解、QR因数分解、线性系统求解、奇异值分解,以及最小二乘法求解和约束最小二乘法。你可以从网址www.culatools.com/versions/basic上下载这个基本版本。你将注意到,EM Photonics公司提供了软件使用许可,其中包含了大部分的LAPACK函数,以及当发布基于CULAtools的商业软件时需要包含的许可条款。

12.4.3 语言封装器

本书使用的编程语言为C和 C++\mathrm{C + + } ,然而有许多项目并不是采用这两种语言。幸运的是,一些第三方机构编写了各种语言封装器,用来在非NVIDIA官方支持的其他语言中访问CUDA。

NVIDIA本身为CUBLAS库提供了FROTRAN绑定,此外在www.jcuda.org上还包含了对数个CUDA库的Java绑定。同样,在Python应用程序中可以通过Python封装器来访问CUDA C核函数,下载地址为http://mathema.tician.de/software/pycuda。最后,在CUDA.NET项目中推出了在Microsoft .NET环境下使用的绑定,下载地址为www.hoopoe-cloud.com/Solutions/CUDA.NET。

虽然这些项目都不是由NVIDIA正式支持的,但它们在CUDA的数个版本中都存在,并且都拥有大量的用户群。这里需要指出的是,如果你选择的(或者老板规定的)语言不是C或 C++\mathrm{C + + } ,那么你首先要做的不是排除GPU计算,而是看看能否找到相应的语言绑定。

12.4_代码资源 - CUDA by Example | OpenTech