并行程序设计探讨(1)——并行系统

大家可能会有疑问:你一会儿并行,一会儿多核,到底是谁跟谁啊?

我开始也有这个疑问,甚至以为并行就是多核,其实两个并不能对等,一句话就是:多核是并行的一种。

并行本身是一个广泛的概念,其实早在多核之前并行处理就已经存在N久了,大家想想看:IBM、SUN、HP的小型机,哪个不是多CPU的?甚至连DELL的工作站,都是两CPU的,更不用说那些中型机、大型机、巨型机了。所以说“并行处理”是一个比“多核处理”要广泛、要早的多的技术,多核只是在PC领域实现了并行处理而已(当然,如果再把多核CPU放到以前的多CPU系统中,那自然系统就更加强大了)。

言归正传,我们还是看看大师们是怎么划分这个并行系统的。

1                    费林分类Flynn's Taxonomy

费林分类法(Flynn's Taxonomy),是一种高效能计算机的分类方式。1972年费林(Michael J. Flynn)根据资讯流(information stream)可分成指令(Instruction)和资料(Data)两种。据此又可分成四种计算机类型:SISD, SIMD, MISD, and MIMD.

注意:费林分类是划分计算机的,不是划分CPU的。

1.1   SISD (Single Instruction Single Data)

单处理指令单数据,一条指令处理一个数据,所有的冯诺依曼体系结构的“单处理器计算机”都是这类,基本上07年前的PC都是这类。

1.2   SIMD (Single Instruction Multiple Data)

单指令多数据,一个指令广播到多个处理器上,但每个处理器都有自己的数据。

这种系统主要应用在“专有应用”系统上,例如数字信号处理、向量运算处理,其并行功能一般都是由编译器完成的。

1.3   MISD (Multiple Instruction Single Data)

多指令单数据,没有系统按照这个结构设计,这种类别仅仅是为了分类完整而提出来的。

1.4   MIMD (Multiple Instruction Multiple Data)

多指令多数据,每个处理单元有独立指令和数据

这是并行处理系统中最常见的结构,现代流行的并行处理结构都可以划入这一类。

2                    MIMD详细分类

大家可能会有疑问:前面不是已经分类了么?为什么还要单独拿出来将MIMD又分一下呢?

既然是单独拿出来,要么就是原来的分类不够细,要么就是很重要,要单独进行说明,而这两个理由在将MIMD分类时都有:一是MIMD确实太粗了,在实际应用中不会直接说某某系统是一个MIMD系统;二是MIMD是目前并行处理系统中最常见、使用最广泛的系统。

费林分类的标准是指令和数据,那么MIMD的分类标准又是什么呢?CPU、内存、总线、还是其它?

MIMD的分类标准是“内存结构”,也就是内存是如何组织的,而内存结构又可以简单的分为两大类:共享内存和消息驱动。顾名思义,共享内存就是处理器之间共享内存,通过共享内存进行通信;消息驱动就是处理器之间不共享内存,靠消息驱动来进行通信s。

根据这个原则,一般分为如下几种:

共享内存:SMP,NUMA

消息驱动:DMA。

2.1   SMP(symmetric multiprocessors)对称多处理机

所有CPU都共享同一内存。

SMP又叫UMA(uniform memory access),至于为什么叫这个,看完下面的NUMA你就会知道了。

所以按照SMP的定义,目前Intel和AMD推出的多核CPU应该划归到SMP这一类。

2.2   NUMA (nonuniform memory access) 非一致内存访问

所有CPU共享所有的内存,但不同的CPU访问不同的内存时速度不一样。

中文翻译为“非一致内存访问”,我感觉很拗口,还不如直接翻译成“牛马”, 牛马本来就不是一个东东,而且正好牛和马一快一慢:)。

下面的图是从《并行程序设计模式》中摘出来的,图画的有点误导人,从图中来看好像是内存之间进行了连接,实际上内存之间是没有连接的,CPU访问离自己近的内存是通过本地s直接访问的(像马一样快),访问离自己远的内存是通过总线访问(像牛一样慢)的,因此很明显两者速度差别很大,这也是之所以叫做nonuniform的原因。

与NUMA类似的还有一个ccNUMA,前缀cc是cache-coherent(一致性高速缓存)的缩写。 为什么会冒出这样一个系统呢?其实就是为了解决nonuniform的问题,即:解决访问不同内存速度不一样的问题。

2.3   DM (Distributed memory)分布式内存

每个CPU都有自己的内存,CPU之间通过消息来通信。

根据interconnect network的不同,DM又分为两种:MPP、Cluster、Grid。三者的差别简单的来说就是:MPP是一台机器,Cluster是一群类似的机器,Grid是一堆任意的机器。

2.3.1   MPP (massively parallel processors) 大规模并行处理系统

这样的系统是由许多松耦合的处理单元组成的,要注意的是这里指的是处理单元而不是处理器。每个单元内的CPU都有自己私有的资源,如总线,内存,硬盘等。在每个单元内都有操作系统和管理数据库的实例复本。这种结构最大的特点在于不共享资源。

2.3.2   Cluster集群

集群应该是大家最常见的,就是一堆相同或者类似的机器通过网络连起来组成一个计算机群,相互之间通过网络进行通信。

2.3.3   Grid网格系统

网格系统其实和集群差不多,都是一堆机器通过网络连接起来,但两者还是不同的东西:

1)集群中机器都是同质的,所谓“物以群分”;而网格中是异质的,可能一个大型机、一台PC机、一台手机都是网格系统中的一个机器;

2)集群中的机器都是属于某一个实体的,需要“集中管理”,例如一个公司、一个组织、一个人;而网格中的机器属于不同的实体的,只需要“分散管理”即可,甚至大家都不知道有哪些机器在这个网格中。

3)大部分情况下,集群是通过局域网进行连接,网格是通过互联网连接。s

仔细数了数,和并行系统相关的名词就有10个了,本文知识提纲挈领的将这些并行系统介绍了一下,详细的研究还需要各位根据自己的情况亲自完成了。

==========================未完待续===============================

多核时代:并行程序设计探讨(1)——并行系统相关推荐

  1. 多核时代:并行程序设计探讨(2)——并行实现技术

    并行程序设计探讨(2)--并行实现技术 通过"并行程序设计探讨(1)"的介绍,相信大家都已经对并行系统相关的概念有了初步的了解.不过看起来挺吓人的,一堆的术语和概念,想起来头就有点 ...

  2. linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...

    并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Wi ...

  3. 多核时代:并行程序设计探讨(7)——并行编程模式概览

    并行编程模式概览 前面的5.6篇博文,都是和并行编程相关的基础知识,如果你一路看来,基本上也能够开始进行并行编程设计了,也可以和别人吹吹牛.聊聊天了. 但"欲穷千里目,更上一层楼" ...

  4. 多核时代,并行编程为何“臭名昭著”?

    作者 | Yan Gu 来源 | 转载自知乎用户Yan Gu [导读]随着计算机技术的发展,毫无疑问现代计算机的处理速度和计算能力也越来越强.然而细心的同学们可能早已注意到,从2005年起,单核的 C ...

  5. 多核时代 .NET Framework 4 中的并行编程6---并行LINQ

    1. 并行LINQ(PLINQ) 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现. PLINQ 查询在许多方面类似于非并行 LINQ to Objects 查询. PLINQ 尝试充分利 ...

  6. 并发和并行的区别_多核、多处理器、并发、并行、超线程概念总结

    多核与多处理器 多核( ) 多核处理器就是指单个 CPU 中有多个可执行单元. 如下图所示,单个 CPU 中有两套可执行单元. 多处理器( ) 多处理器系统则是一个拥有多个 CPU 的系统.每个 CP ...

  7. 奥鹏20春季1903C语言,奥鹏20春学期《并行程序设计》在线作业

    1,n个数求和的串行程序,通过一个循环将每个数累加到全局变量sum中,其多线程版本简单将循环范围改变为每 个线程负载的范围,存在的问题是____. A 负载不均 B 通信开销大 C CPU空闲等待严重 ...

  8. NVIDIA CUDA初级教程(P2-P3)CPU体系架构概述、并行程序设计概述

    文章目录 1.CPU体系架构概述 2.并行程序设计概述 1.CPU体系架构概述 现代CPU架构 CPU的定义 (1)执行指令.处理数据的器件:完成基本的逻辑和算术指令 (2)内存接口.外部设备接口 ( ...

  9. C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度

    目录标题 引言 数据并行:将数据集分割成多个子集,分配给多个线程或处理器并行处理. 延迟执行与乱序执行:对指令的执行顺序进行调整,提高指令流水线的利用率和性能. 延迟执行 乱序执行 任务并行:将程序分 ...

最新文章

  1. 机器就能绘制这样的作品,你还去写生吗?(续)
  2. 数据结构概览之第八章排序
  3. linux c 文件描述符 得到 文件名
  4. 对样本不均衡一顿操作
  5. 如何查询spark版本_掌握Spark SQL中的查询执行
  6. 【ArcGIS Pro微课1000例】0011:ArcGIS Pro范围内汇总工具的巧妙使用——以甘肃省各地区内河流总长度计算为例
  7. 中兴计算机专业,中兴计算机专业面试题.pdf
  8. 2016年1月20日总结
  9. 春运能不能抢到票就看他了!开源的Python抢票神器
  10. 一种机器人语音识别系统及其工作方法与流程
  11. HBase简介及使用
  12. Excel数据批量导入导出(基础版)
  13. cityscape 数据集 mmsegmentation训练记录
  14. 微信开放平台申请流程讲解与注意事项(未完待续)
  15. ADW_Launcher
  16. java订单超时取消设计_订单超时30分钟自动取消
  17. 微信小程序--数据库数据批量导出为excel文件,预览下载
  18. python制作搜索工具,深挖电脑里的小九九
  19. Python反编译pyinstaller打包的exe文件 从0开始(未加密篇)
  20. Charmer--viv【并查集】【最小生成树】

热门文章

  1. ExpRe[23] Oz[0] emacs初步,Hello world
  2. java初学之乘法口诀表
  3. linux自启动(自动启失败等解决方法)
  4. graphx中的pregel原理详解
  5. lstm训练情感分析的优点_NLP入门(十)使用LSTM进行文本情感分析
  6. 为什么感觉假期还没开始就快要结束了?
  7. Scade——学习笔记
  8. 【基于vue写的select下拉框】
  9. java线程游戏V4之飞机大战(一)
  10. 2008年4月西雅图MVP全球峰会记录