zoukankan      html  css  js  c++  java
  • 并行计算知识科普

    简介

    并行计算的概念是随着最近10年Hadoop的普及而逐渐进入国内互联网相关工业界的。但是他其实是一个很早很早就有的概念,因为计算机的诞生就是为了能快速做科学计算,为了提高计算效率,所以从计算机诞生的那一天开始,人们就开始研究这个领域。

    如果你喜欢本博客,请点此查看本博客所有文章:http://www.cnblogs.com/xuanku/p/index.html

    并行计算主要分成三类:

    1. 比特级并行计算

      这一类主要是指提高总线带宽。从8位提高到16位的话,就能让效率提高一倍。

    2. 指令级并行计算

      CPU内部流水(scala)并行处理。

    3. 任务级并行计算

      这一类是本文重点描述的类型。提供相同数据或者不同数据在不同计算单元上的并行处理能力。

    针对任务级并行计算,远在1966年,一个叫Michael.J.Flynn(1)的哥们按照当时计算机CPU的体系结构讲计算机分成了四类。后来人们把这个计算机分类的方法叫Flynn分类法(2)。

    这个分类的方法到现在也是合适的:

    在这四个分类里面,S代表Single,M代表Multiple, I代表Instruction, D代表Data。

    1. SISD

      单指令单数据。在CPU里面有一个CU(Control Unit),来从主存里获取一条指令流(IS,Instruction Stream),从一个地方获取数据(Data Stream),再发送给一个PU(Processing Unit)。

    2. SIMD

      单指令多数据。跟Hadoop的思想很类似,只是Hadoop的每个PU是一台机器或者一个槽位,Flynn当时提这个分类的时候指的是CPU中的一个计算单元,GPU就是一个典型的SIMD的处理器。

    3. MISD

      多指令但数据。他的存在只是为了让这个分类更完整而已,没有这种计算机或者实际需求。当然,有的学着将流水系统(scala)称之为MISD。

    4. MIMD

      多指令多数据。这个是最复杂的情况,也是并行计算里面研究比较多的一个分支。

    在并行计算领域里面,一般不讲SISD和MISD,只研究SIMD和MIMD两个分类。

    到现在的话,随着集群思想的发展,人们套用这四个分类,将I替换为P(Program)。比如Hadoop就是一个典型的SPMD的编程模型。

    SIMD

    SIMD的并行计算机的研究是从上个世纪70年代一直到80年代中期。这是上个世纪70年代的主流研究方向。按照这个思路生产出来的计算机又叫向量处理机(Vector Processor/Array Processor)。

    当时的代表机器有两款:

    1. CDC公司的STAR-100
    2. cray公司的cray-1

    MIMD

    MIMD的研究从上个世纪80年代开始逐渐占据了主流,也取得了一系列卓越的成绩。在这个领域,主要分成了两个分支,一个分支主要研究体系结构,一个分支主要研究编程界面。前者偏硬件,旨在提高不同类型并行计算需求的计算效率;后者偏软件,旨在研究如何简化撰写并行计算代码的成本。

    体系结构

    体系结构主要从如下三方面来了解:

    1. 计算单元
    2. 访存模式
    3. 网络连接

    典型的并行计算体系结构是按照计算单元和访存模式来分类的,网络连接另起篇章来描述。体系结构的主要分类如下:

    1. SMP

      Symmetric Multi-Processing。对称多处理器。多个计算单元公用内存,每个计算单元对主存的访问是平等的。现在典型的线上服务器都是采用SMP处理器的机器。

    2. DSM

      Distribute Shared Memory。跟SMP相反,处理器对主存访问是不公平的,对有的存储区域访问快,有的存储区域访问慢。但是逻辑上每个处理器看到的还是一个统一的地址空间,这样能保证编程模型相对简单。

    3. Cluster

      典型的是Hadoop集群, 采用典型的商用服务器(少核+少磁盘)+商用交换机, 每个服务器一个节点, 靠人海战术, 很多个节点放一起来并行工作。

    4. Constellation

      Cluster是小机器放一起, Constellation就是"复仇者联盟", 各个都是精英, 每个节点有甚至数以千计的CPU, 以及有很大的存储空间(可能是共享)。

    5. MPP

      跟集群类似, 只是这一类都是特殊情况特殊处理。网络会有自己专用的网络(往往是不计成本), 会运行自己专用的操作系统, 编译系统和作业管理系统。

      这类专用的系统在高性能计算机排名中占据了大壁江山。

    编程模型

    当前比较流行的并行编程环境主要分为三类:

    1. 消息传递(LogP)

      支持大粒度的进程级并行, 所以具有很好的可移植性, 几乎支持所有主流的并行计算体系架构。但是因为数据必须通过消息传递来进行交互, 所以其编程难度是这几个编程模型中最复杂的, 也是上手成本最高的。

      典型代表: MPI, PVM

      MPI是当年为了统一不同的MPP厂家编程方式的不同而制定的工业标准, 其强调的是通信性能;

      PVM不是一个库, 他为用户抽象成了一个大型操作系统。PVM内部将每个子任务称之为一个虚拟机, 各个虚拟机之间通过网络来传递数据, 他强调的是虚拟机的异构, 容错和可扩展性。相比而言, 性能没那么看重。

    2. 共享存储(PRAM)

      只支持 SMP&DSM 的体系结构, 并行编程的难度较小, 但一般情况下, 并行性能不如消息传递的编程模型, 且移植性差。

      典型代表: OpenMP

    3. 数据并行(BSP)

      将数据拆成多份运行同样的程序, 并行编程的成本相对较低, 但并行效果一般, 以为他是一个松散同步的编程框架。

      典型代表: HPF。Hadoop/Spark。

    参考

    1. Michael.J.Flynn http://arith.stanford.edu/~flynn/
    2. Flynn's taxonomy http://en.wikipedia.org/wiki/Flynn%27s_taxonomy
    3. 并行计算导论 http://pan.baidu.com/disk/home#path=%252Fcloud_doc%252Fknowledge%252Fcomputer_science%252Farch%252Fcomputing
    4. MPI vs PVM. http://wenku.baidu.com/link?url=FLzT76PC4yfGxmGdWUiODHzRubvyuYkBru5WIG52h7wvlQBS39W-TX6BUgetecrBp5bkfXQ7CuTbFUKGUszX0D3Zkq3RSDoqO3AXUDZB21G
    5. Linux高性能集群计算. http://docs.babel.baidu.com/doc/cd621946-dfc2-4346-82c4-aa6d86c3ddce
  • 相关阅读:
    单机RedHat6.5+JDK1.8+Hadoop2.7.3+Spark2.1.1+zookeeper3.4.6+kafka2.11+flume1.6环境搭建步骤
    kafka_2.11-0.8.2.1+java 生产消费程序demo示例
    Kafka使用log.retention.hours改变消息端的消息保存时间
    Apache Kafka监控之KafkaOffsetMonitor
    Apache Kafka监控之Kafka Web Console
    Kafka三款监控工具比较
    linux查看本机IP、gateway、dns
    kafka_2.11-0.8.2.1生产者producer的Java实现
    linux下杀死进程(kill)的N种方法
    Linux查看硬件配置命令
  • 原文地址:https://www.cnblogs.com/xuanku/p/parrallel_computing.html
Copyright © 2011-2022 走看看