为什么要并行计算

关于并行程序,首先思考它的目的,具体来说:

  1. 为什么我们要不断提高性能? 因为计算能力的提升是很多邻域能够进步的核心。
  2. 为什么我们要建立并行系统? 因为对于单处理器而言,其性能的提升实际是提高了处理器上晶体管的密度,但受限于散热问题等,密度无法一直提升。如果考虑并行化,即生产多个相对简单的完整处理器放在一个芯片上,即多核处理器,就能解决密度问题。
  3. 为什么我们要写并行程序? 编写并行程序是为了充分发挥多核处理器的优势,然而将串行程序改写成并行程序并不顺利。

关于并行程序和串行程序,举一个例子,假设要计算nnn个数的值,并求它们的和。对于这个问题,串行代码解法如下:

sum = 0;
for (i = 0; i < n; i++) {x = Compute_next_value(...); // 求得x的值sum += x;
}

现假设计算机有ppp个核,且p<<np << np<<n,那么每个核只需处理约np\dfrac{n}{p}pn​个数的求值及加和,此时代码如下:

my_sum = 0;
my_first_i = ...;
my_last_i = ...;
for (my_i = my_first_i; my_i < my_last_i; my_i++) {my_x = Compute_next_value(...);my_sum += my_x;
}

上面代码中的my_开头的变量代表了每个核的私有变量。

当每个核计算得到自己的my_sum后,这些核把这个结果发送给核master,由master这个核来计算总和sum

if (IsMasterCore) {sum  = my_x;for each core than myself {receive value from core;sum += value;}
} else {send my_x to the master;
}

当然,让master完成最终的求和并不是最优解,在核数足够多的情况下,可以采取如下策略:让0号核加上1号核的值,2号核加上3号核的值,以此类推,即偶数号核加上其后一号的核对应的值;然后让0号核加上2号核的值,4号核加上6号核的值……

虽然最优解听上去很完美,但是却难以作为一套方案通过编写并行程序来实现。因此才会有上面提到的,改写不顺利,但不能因为不顺利就浪费掉多处理器的能力。

如何编写并行程序

这个问题取决于如何在内核间划分工作的想法。主流的划分方法有:任务并行(task-parallelism)数据并行(data-parallelism)。顾名思义:

  • 任务并行:不同的核分配到的任务不同,每个核各司其职,最终完成整个任务。
  • 数据并行:每个核处理的任务相似,但是处理的数据则不同。

在上面提到的求值并求和的例子中,master和其余核就是任务并行的一个实例,而除了master以外的这些核在做求值和加法运算的过程就是一个数据并行的实例。

编写并行程序过程中需要协调的问题:

  1. 通信(communication)
  2. 负载均衡(load balancing)
  3. 同步(synchronization)

编写显式并行(explicit parallel)程序

这里学习三种不同的C扩展:

  • Message-Passing Interface (MPI)
  • POSIX threads (Pthreads)
  • OpenMP

在学习的过程中,将重点关注两种主要类型的并行系统:共享内存系统 (shared-memory system)和分布式内存系统 (distributed-memory system)。

在共享内存系统中,核心可以共享对计算机内存的访问;原则上,每个核都可以读写每个内存位置。(Pthreads, OpenMP)

在分布式内存系统中,每个核都有自己的私有内存,核必须通过通过网络发送消息之类的方式显式通信。(MPI)

上图中,图(a)是共享内存系统,图(b)是分布式内存系统。

并发、并行和分布式

并发计算中,一个程序是指在任何时刻都可以同时进行多个任务的程序。

并行计算中,一个程序是指多个任务紧密合作来解决一个问题的程序。

分布式计算中,一个程序可能需要与其他程序合作来解决一个问题。

// 以上内容整理自《Introduction to Parallel Programming》一书

并行程序设计整理(一)相关推荐

  1. 并行程序设计整理(二)

    并行硬件和并行软件 背景 并行硬件和软件是从传统的串行硬件和软件发展而来的. 冯·诺依曼结构 (The von Neumann architecture) 经典冯·诺伊曼体系结构由主存储器 (main ...

  2. 并行程序设计报告(MPI并行计算π,实现mandelbrot集)

    代码的github地址 一.熟悉MPI并行程序设计环境 1.硬件 电脑:HP暗夜精灵 内存:4G 处理器:ntel® Core™ i5-6300HQ CPU @ 2.30GHz × 4 显卡:NVID ...

  3. 基于mpi的奇偶排序_并行程序设计(第2版)pdf

    并行程序设计(第2版) 内容简介 本书系统介绍并行程序设计原理及应用.除介绍常用的一些算法范例,包括分治.流水.同步计算.主从及工作池,还介绍了一些常用的经典数值和非数值算法,如排序.矩阵相乘.线性方 ...

  4. 实战matlab之并行程序设计.pdf,实战Matlab之并行程序设计_IT教程网

    资源名称:实战Matlab之并行程序设计 内容简介: <实战Matlab之并行程序设计>通过阅读和学习,读者可以掌握基于多种平台(多核.多处理器.集群和GPU等),利用多项技术(Matla ...

  5. Nvidia CUDA初级教程2 并行程序设计概述

    Nvidia CUDA初级教程2 并行程序设计概述 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=3 讲师:周斌 本节内容: 为什么需要? 怎么做? ...

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

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

  7. OpenMP 并行程序设计入门

    OpenMP 是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的. 0. 一段使用 OpenMP 的并行程序 #include <stdio.h> #inclu ...

  8. 并行程序设计导论_C程序设计导论

    并行程序设计导论 基本术语 (Basic Terminology) Before we start the technicalities of our topic, let us understand ...

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

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

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

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

最新文章

  1. UICollectionView的基本使用(1)
  2. OpenGL(glut)模拟太阳系:太阳,地球,月球,火星
  3. socket套接字选项
  4. 多媒体个人计算机能处理什么,多媒体计算机可以处理的信息类型有哪些
  5. 基于完成端口的文件传输设计
  6. 从蚂蚁金服实践入手,带你深入了解 Service Mesh
  7. 运算符重载——拷贝构造函数与赋值运算符的区别、如何实现赋值运算符的深拷贝
  8. php手册中点击下载的功能,PHP实现文件下载功能
  9. 操作系统期末考试重点知识
  10. PS 制作ICO图标和图片背景透明化
  11. 超简单Python实现微信机器人自动回复
  12. Stata连享会:分享一大堆资料
  13. 全屋Wi-Fi:一个谁也解决不好的痛点?
  14. 【前端】你真的理解JavaScript中的变量和数据类型吗
  15. SQL2008使用with求余额表,流水账方式
  16. VS2019源码,通过基址+偏移修改软件内阳光数值(植物大战僵尸单机版)
  17. 盘点那些免费视频网址到底有多爽
  18. 如何做好客户维护与服务器,如何做好客户维护关系与管理
  19. Java JNI初体验
  20. python 全排列 递归中的两种实现

热门文章

  1. 谈谈 MVX 中的 Controller
  2. c语言的虚拟变量,含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解...
  3. 陈强教授 计量经济学及机器学习等数据集、程序等相关资源
  4. 解决IE访问Oracel OEM证书错误
  5. 你一定要上网,看到这段文字,做一…
  6. 我为什么从外包公司离职了?
  7. 《多媒体在初中数学中的运用研究》课题研究方案
  8. HTML meta 标签
  9. 计算机英语四六级考试时间,2019年12月英语四六级考试时间
  10. 个人java课设的心得体会收获_java课程设计心得体会