1.1 异构编程
如图7所示,CUDA编程模型假设CUDA线程在一个物理上独立的设备上执行,该设备作为运行C++程序主机的协处理器运作。例如,当内核在GPU上执行而C++程序的其余部分在CPU上执行时,就是这种情况。
CUDA编程模型还假设主机和设备各自维护独立的DRAM内存空间,分别称为主机内存和设备内存。因此,程序通过调用CUDA运行时(如编程接口中所述)来管理内核可见的全局内存、常量内存和纹理内存空间。这包括设备内存的分配与释放,以及主机内存与设备内存之间的数据传输。
统一内存提供了托管内存来桥接主机和设备内存空间。托管内存可作为具有统一地址空间的单一连贯内存映像,被系统中所有CPU和GPU访问。这一功能支持设备内存的超额订阅,并通过消除在主机和设备上显式镜像数据的需求,极大简化了应用程序移植工作。
注意:串行代码在主机上执行,而并行代码在设备上执行。
1.1.1 主机-设备协同计算模型
CUDA的异构编程模型构建于物理隔离的执行环境之上。如图7所示,CPU作为主机(H