并行与分布式计算:衡量并行程序好坏的指标(一)
介绍
写给普通学习者: 本文及其后续系列是一套详尽的并行计算与分布式计算,openMP及MPI的入门教程
写给P大学子: 由于授课英语太塑料了,我的学术英语也太差了,并分导的课堂上我总是处于游离边缘。因此我特别在学习之余总结了并分导授课的主要内容(内容来自PPT和教材的阅读),以供后人使用。阅读本系列你将获得:
- 罗老师并分导的全部知识点(还有分支去梳理考点噢)
- 所有作业及其详解
- 用半小时完成两小时塑料英语课堂的学习(ppt reader已经很过分了,用的还是塑料英语)
特别说明,由于Lecture1除了speedup怎么算什么solid的东西都没有,在这里就不着重写了
为了方便,下文将MPI与OpenMP并行程序设计:C语言版(By Michael J. Quinn)简称为教材
特别的,对于P大学子,推荐阅读完教材的第三章之后直接跳到第十七章去学OpenMP
Section 1 衡量并行程序好坏的指标
一言以蔽之,进行并行与分布式计算的原因就是把搬砖的工作分给10个人搬起来就比1个人快
我们很自然的关注快了多少——也就是加速比(Speedup)的问题
-
A
m
d
a
h
l
′
s
L
a
w
Amdahl's\ Law
Amdahl′s Law
S p e e d u p = o n e t h r e a d e x e c u t i o n t i m e n t h r e a d e x e c u t i o n t i m e = 1 ( 1 − p ) + p / n Speedup=\frac{one\ thread\ execution\ time} {n\ thread\ execution\ time}=\frac 1 {(1-p)+p/n} Speedup=n thread execution timeone thread execution time=(1−p)+p/n1
其中, p p p是程序可并行的部分( P a r a l l e l f r a c t i o n Parallel\ fraction Parallel fraction), 1 − p 1-p 1−p是程序仅串行的部分( S e q u e n t i a l f r a c t i o n Sequential\ fraction Sequential fraction)
这个公式的内容和意义都是显然的
此外,我们还会很自然的关注另一个问题——假如我用一个人,干活的时间是二十四小时,用一千个人,干活的时间是二十三小时,那我不就是个有钱的凯子吗?——并行效率(Parallel Efficiency)
P
a
r
a
l
l
e
l
E
f
f
i
c
i
e
n
c
y
=
o
n
e
t
h
r
e
a
d
e
x
e
c
u
t
i
o
n
t
i
m
e
n
∗
(
n
t
h
r
e
a
d
e
x
e
c
u
t
i
o
n
t
i
m
e
)
=
1
n
(
1
−
p
)
+
p
Parallel Efficiency=\frac{one\ thread\ execution\ time} {n*(n\ thread\ execution\ time)}=\frac 1 {n(1-p)+p}
ParallelEfficiency=n∗(n thread execution time)one thread execution time=n(1−p)+p1
这个公式简单来说就是作为一个老板,你不仅要考虑请一群人搬砖节约了多少时间,还要考虑为此你要雇多少人