一般来说,除了CPU,其他平台通常都不是图灵完备的,需要和CPU一起协作来完成工作任务的处理。在本书中,我们约定如下:
- 如果一个任务由CPU执行,我们称之为软件执行;
- 如果一个任务(或任务的一部分)由协处理器、GPU、FPGA或ASIC执行,我们可以统称之为硬件“加速”执行;
- 如果一个任务,至少分为两个部分,一部分在CPU的软件执行,另一部分在协处理器、GPU、FPGA或ASIC硬件执行,并且这两者之间需要相互通信和协作,那我们可以称此任务是软硬件协作来完成。
以基于CPU+GPU的异构计算架构为例。CUDA是NVIDIA创建的并行计算平台和应用程序编程接口(API)模型。CUDA允许软件开发人员使用具有支持CUDA功能的图形处理单元(GPU)进行通用处理。CUDA平台是一个软件层,可直接访问GPU的虚拟指令集和并行计算元素,以执行计算内核。
如图 2.6,CPU视角的CUDA的简单处理流程如下:
- CPU顺序执行任务,结束后把数据保存在CPU的内存中;
- 将待处理的数据从CPU内存复制到GPU内存(图中的①处理);
- CPU指示GPU工作,配置并启动CUDA内核(图中的②处理);
- 多个CUDA内核并行执行,来处理准备好的数据(图中的③处理);
- 处理完成后,将处理结果复制回CPU的内存&