前面我们展示了很多基于GPU加速的效果展示,其实这些程序大部分都是依靠CUDA来实现的GPU加速,GPU的性能非常强大,这是NVIDIA早就意识到的问题,早在G80时代,NVIDIA就提出了CUDA的概念,只不过因为那时候CUDA还未成型,所以没有公布,而现在,基于CUDA的应用程序越来越多,因此伴随着GTX200系列芯片的发布,CUDA也同时正式大范围的推广并介绍给普通消费者。
GPU的性能非常强大,因此无论Intel还是AMD都看到了这一点,不过因为自身处理器发展成熟的缘故,所以这两家处理器公司都采用了GPGPU的提法,也就是基于x86处理器架构的平台,它与NVIDIA概念上的区别就是:它的计算仍然通过API送入GPU的,传统的GPGPU应用往往要了解OpenGL编程或者DirectX编程。
而NVIDIA基于CUDA平台的解决方案,如果你的应用不涉及OpenGL或者DirectX的话就可以不用理会那些API。也就是说以前的GPGPU进行通用计算是通过把这些问题转换成为图形计算送到GPU中完成的,而现在基于CUDA则可以直接调用GPU的计算资源,成为高性能计算的软件开发环境。
那么CUDA究竟是什么呢?CUDA(Compute Unified Device Architecture)是显卡厂商NVIDIA推出的一个基于其自身GPU的运算平台,它可以让显卡可以用于图像计算以外的目的。CUDA工具集的核其实心是一个C语言编译器,CUDA开发环境的具体内容包括:
· nvcc C语言编译器
· 适用于GPU(图形处理器)的CUDA FFT和BLAS库
· 分析器
· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)
· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)
· CUDA编程手册
CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。这些范例包括:
· 并行双调排序
· 矩阵乘法
· 矩阵转置
· 利用计时器进行性能评价
· 并行大数组的前缀和(扫描)
· 图像卷积
· 使用Haar小波的一维DWT
· OpenGL和Direct3D图形互操作示例
· CUDA BLAS和FFT库的使用示例
· CPU-GPU C—和C++—代码集成
· 二项式期权定价模型
· Black-Scholes期权定价模型
· Monte-Carlo期权定价模型
· 并行Mersenne Twister(随机数生成)
· 并行直方图
· 图像去噪
· Sobel边缘检测滤波器
· MathWorks MATLAB插件