了解异构计算架构
一、并行计算
通俗地讲就是将一个大的问题分解成多个小问题,然后在不同的计算资源上并行处理这些小问题。并行计算通常涉及到两个不同的计算技术领域:计算机架构和并行程序设计。
1、计算机架构关注的是在结构级别上支持并行性,并行程序设计关注的是充分使用计算机架构的计算能力来并发地解决问题。
对于计算机体系结构,大学里都会学到冯诺依曼体系结构。这里就主要介绍一下哈弗体系结构,它主要由3个部分组成:内存,中央处理器和输入输出接口。如下图所示:
- 内存:指令内存和数据内存
- 中央处理器:控制单元和算术逻辑单元
- 输入/输出接口
高性能计算的关键部分就是中央处理单元,也称为计算机的核心。现在计算机一般是多核处理器,指的是将多个核心集成到一个单一的处理器上,以在体系结构级别支持并行性。
2、并行程序设计
可以理解为将一个问题的计算分配给可用的核心来实现并行的过程。要了解并行程序设计,我们先了解串行和并行编程。
2.1串行编程和并行编程
串行编程是大多数人在编程时最容易想到和运用到的。通常在面对一个问题,我们很自然的就会将这个问题划分成许多的执行小块,然后依次执行这些小块,最终解决问题。如下图所示:
串行编程是有执行次序的,若没有执行次序的要求则可以用并行编程。当然一个程序中即可以有串行也可以有并行。如下图所示:
** 当我们在编写程序时,什么时候用串行什么时候用并行呢?**我们在计算一个问题时,将问题划分成许多的小的计算单元后,每一计算单元就是一个任务,我们要知道在一个任务中,单独的指令负责处理输入和调用一个函数并产生输出,若一个指令处理前一个指令产生的数据时,就有了数据相关性的概念,所以我们在区分两个任务之间的依赖关系,如果没有依赖那就独立,独立就可以使用并行计算。
2.2并行性
下面介绍在应用程序中的两个基本并行类型:任务并行和数据并行。 - 任务并行就是当许多任务或函数可以独立地、大规模地并行执行。重点就是利用多核系统对任务进行分配。
- 数据并行就是当可以同时处理许多数据,重点就是利用多核系统对数据进行分配。CUDA编程就非常适合解决数据并行计算的问题。
二、异构计算
1、异构架构
一个典型的异构计算节点包括两个多核CPU插槽和两个或更多个的众核GPU。GPU不是一个独立运行的平台而是CPU的协处理器。GPU必须通过PCIe总线与基于CPU的主机相连来进行操作。我们将CPU所在的位置称为主机端,GPU所在的位置成为设备端。如下图所示:
异构平台上执行的应用通常由CPU初始化,在设备端加载大量数据前,CPU代码负责管理设备端的环境、代码和数据。GPU就用来处理计算数据和提高数据的执行速度。
我们可以同时使用CPU和GPU来执行程序,在CPU上执行串行部分或任务并行部分,在GPU上执行数据密集型并行部分,如下图所示:
(未完…刚学习完CUDA编程,准备出一系列关于CUDA编程的知识作为巩固和深入,每三天更新一篇,若写的有不对的欢迎指正。)