CUDA编程
CUDA是建立在NVIDIA的CPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高校解决比较复杂的计算难题。

GPU不是独立的计算平台,而需要与CPU协同工作。如图所示,CPU和GPU是通过PCLe 总线连接在一起协同工作的,GPU所在的位置称为主机端(host),而GPU所在位置称为设备端(device) 。可以看到GPU包含更多的运算核心,比较适合数据并行的计算密集型任务,而CPU的运算核心较少,但可以实现复杂的逻辑运算,适合控制密集型任务。此外,CPU上的线程是重量级的,上下文切换开销大,但是GPU由于存在多个核心,其线程是轻量级的,因此一般CPU负责处理逻辑复杂的串行程序,而GPU重点处理数据密集型的并行计算程序,如下图所示。

CUDA编程模型基础
在CUDA中,host和device是两个重要概念,我们用host指代CPU及其内存,而用device指代GPU及其内存。CUDA程序中既包含host程序,也包含device程序,它们分别在CPU和GPU上运行。