并行计算概述

来源:互联网 发布:python 执行 ssh 编辑:程序博客网 时间:2024/06/06 19:56

并行计算概述

这篇日志介绍并行计算的极为基础的一部分,为那些准备接触熟悉并行计算的人准备。 其中的描述和理解,大部分是根据我个人非常有限的经验和研究。 所以,可能存在失误。欢迎所有的意见和更正。

  • 什么是传统的串行计算?
    通常,串行计算程序是运行在具有一个核心(或CPU)的单机上。 这种程序被编译和解释成一串独立的命令指示,然后被挨个执行。 换句话说,任何时候只有一个线程在执行。

  • 什么是并行计算?
    相对应的,并行计算程序运行在一个多核心(或CPU)的计算机、或者由多台计算机组成的网络上。 这种程序被编译成多个部分,每个部分又进一步转化为一系列指令。 不同部分的指令可以同时执行。 换句话说,在同一时间可以有多个线程在执行。

  • 并行计算为什么有用?
    显然,并行计算可以节省时间。 并行计算也增加了资源的利用率。 另外重要的一点是,并行计算可以帮助解决不能在一台计算机上通过串行计算来解决的问题,尤其当受到速度或内存的限制时。
  • 并行计算有多少种模式?
    据我所知,依据内存是如何利用的分为三种模式:
    1.共享内存:
    在这种模式下,所有的线程独立运作,但共享相同的内存资源。 例如,在一个多核心电脑上不同的线程共享内存里的矩阵、参数,等等。这种模式在今天通常称为Symmetric Multiprocessor (SMP)。 这种模式下典型的并行计算程序可以使用OpenMP实现(一个API的多平台共享存储并行编程)。(下面图中的不同的CPU也可以表示不同的线程。)

    2.分布式内存:
    在这种模式下,线程(或处理器)都有自己的本地内存。 例如,内存可能会分布在整个网络,但是单个计算机上的每个线程只能用本地分配给它的内存。 甚至在同一台计算机上的不同线程都有独立的内存位置。 在这种模式下不同的线程通常需要与其他线程沟通以获取和发送数据。 在这种模式下典型的并行计算程序可以通过MPI(消息传递接口)实现。

    3.混合分布式内存:
    在这种模式下,共享存储的单元通常是一个SMP节点。 在给定的SMP处理器上内存是通用共享的。 程序所需的总内存分布在多个SMP构成的网络上。 每个SMP只知道自己的内存- 而不包括其他的SMP内存。 因此,一个SMP和另一个SMP的网络通信是必须的。 这种模式下典型的并行计算程序可以通过同时使用OpenMP和MPI来实现。