说到CUDA,这是这几年来新崛起的一个技术,但是到目前为止,关于它的能用的教程不是很多,网上的教程大多凌乱,特将自己的学习经历记录下,希望能为同样学习CUDA内容的同道中人提供一点点微薄的帮助。
GPU
和CPU
的机构简图,可以明显的看出来两种处理设备差别很大。CPU有非常大的缓存和控制器单元,GPU的缓存和控制器单元很小。造成这种差别的原因是两种设备的设计哲学不同。CPU设计之初就是用来处理各种各样的任务的,所以会要求通用性。GPU设计用途是用来处理图形学任务的,由于任务非常确定,所以可以特化其设计,使其性能在目标领域达到最大化。
CUDA相比过去并行处理机器的优势在于:
- 入门门槛低--CUDA抛弃了图形学API,从而大大降低了用GPU进行计算的门槛,同时GPU芯片内部数据传递速度很高,也避免了多核甚至多处理器设备通过狭窄的系统总线通信带来的性能损失。
- 用户群体大,N卡用户那么多,现在CUDA程序已经支持在CPU上运行了,这进一步扩大了潜在的客户群体。
- 显卡发展带来的浮点计算能力的激增和浮点运算精度的上升是的GPU作为运算设备成为可能。
CUDA相比GPGPU程序的优势在于
- 抛弃了图形学API,大大简化编程难度。
- 提供了更为强大的内存模型。
- 摒弃了shader数量的限制。
- 提供了更为强大的指令集,更加方便的提高程序的性能。
- 提供了方便的数据传递模型。
GPU擅长的程序:
- 需要并行处理数据的程序。
- 需要很高浮点运算能力的程序。
- 程序有集中性的热点的程序。
- 。。。
CUDA程序是又CPU和GPU共同计算完成的程序,其中CPU执行程序的串行部分,GPU执行程序的并行部分。
对CUDA程序有个大概模型后开始学习CUDA程序语言基础。