异构计算指的是,使用一个处理器来执行一个应用,为任务选择适合它的架构,比如CPU适合复杂的逻辑计算,GPU适合大量简单重复的计算。
1.异构架构
一个典型的异构计算节点包括两个多核CPU插槽和两个或更多个众核GPU。GPU不是一个独立运行的凭条而是CPU的协调处理器,他们通过单个节点中PCI—Express总线相连。CPU所在的位置成为主机端,GPU在的位置成为设备端。
一个异构应用包括两个部分
- 主机代码:在CPU上运行
- 设备代码:在GPU上运行
在计算密集型应用时中,往往有许多并行数据的程序段。GPU就是用来提高这些并行数据的执行速度的。当使用CPU上的一个与其物理分离开的硬件组件来提高应用中的计算密集部分的执行速度时,这个组件就变成一个硬件加速器,GPU可以说是最常见的硬件加速器。
描述GPU容量的两个特征
- CUDA核心数量
- 内存大小
2.CPU线程和GPU线程
CPU线程通常是重量级的实体。
GPU线程通常是高度轻量级的。
3.CUDA:一种异构平台
CUDA是一种通用的的并行计算平台和编程模型,可以通过CUDA加速库、编译器指令、编程应用接口以及行业标准程序语言的扩展(c、c++、python、fortran)来使用。
CUDA C是标准ANSI C语言的一个扩展。
CUDA 提供了两层API来管理GPU设备和组织线程:
- CUDA 驱动API
- CUDA 运行时API
两个API没有明显的性能差异,相互排斥,必须使用两者之一。
一个CUDA程序包含两个部分的代码:
- 主机代码
- 设备代码
主机代码是标准的C,使用c编译器编译。
设备代码,即核函数,是用扩展的带标记数据的并行函数关键字的CUDA C语言编写,通过nvcc编译。