串行程序执行时间[1.1]
程序的执行时间可以通过程序的执行指令数、指令平均时钟周期数(CPI)、以及时钟周期来计算,即:
s
e
c
o
n
d
s
p
r
o
g
r
a
m
=
i
n
s
t
r
u
c
t
i
o
n
s
p
r
o
g
r
a
m
⋅
c
y
c
l
e
s
i
n
s
t
r
u
c
t
i
o
n
⋅
s
e
c
o
n
d
s
c
y
c
l
e
{seconds \over program}={instructions \over program}\cdot{cycles\over instruction}\cdot {seconds\over cycle}
programseconds=programinstructions⋅instructioncycles⋅cycleseconds
(因为时钟周期通常时固定的,所以优化代码通常需要减少前两项:instructions/program 与 cycles/instruction)
并行程序执行时间[2.1]
在无重叠操作的假定下,并行程序的执行时间Tn为:
Tn = Tcompute + Tparallel overhead + Tcommunicate
其中:
Tcompute 表示 计算时间:
程序纯计算所占用的时间;
Tparallel overhead 表示 并行开销时间,包括:
进程管理(如进程生成、结束和切换等)时间,
组操作(如进程组的生成和消亡等)时间,
进程查询(如询问进程的标志、等级、组标志和组大小等)时间;
Tcommunicate 表示 相互通信时间,包括:
同步(如路障、锁、临界区、事件等)时间,
通信(如点到点通信、整体通信、读/写共享变量等)时间,
聚合操作(如规约和前缀运算等)时间。
程序最大性能界限[3.1]
两种下界描述了程序的最大性能——延迟界限和吞吐量界限:
延迟界限(Latency Bound):
现代处理器的最大特点是指令级并行,但是由于数据依赖的情况时有发生,则会出现一系列操作必须严格顺序执行的情况,此时就会遇到延迟界限,即在下一条指令开始前,该条指令必须结束,所以数据依赖所带来的延迟界限限制了现代处理器的指令级并行能力。
吞吐量界限(Throughput Bound):
吞吐量界限刻画了处理器功能单元的原始计算能力。这个界限时程序性能的终极限制。
~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~
吞吐量[1.2]:
处理器的峰值浮点吞吐量可以通过时钟频率和每个周期执行的浮点操作数的乘积估计出来。例如,如果一个处理器在1GHz上每个周期内可以执行10个浮点操作,那么它的峰值吞吐量为100亿每秒浮点运算或者10Gflops。
(注意:flops一词既可以代表每秒所执行的浮点运算次数:flops/s ,也可以代表浮点运算:flops)
[1].《ARM嵌入式系统编程与优化》ISBN 978-7-111-57803-1 詹森-D-巴克斯(著)梁元于(译)机械工业出版社
—> [1.1] :[1]-第一章-1.8节-16页
—> [1.2] :[1]-第一章-1.12节-25页
[2]. 《并行计算-结构算法编程》 (第3版) ISBN 978-7-04-033742-6 陈国良编著 高等教育出版社
—> [2.1] :[2]-第四章-4.1节-119页
[3]. 《深入理解计算机系统》(原书第3版)ISBN 978-7-111-54493-7 兰德尔-E-布莱恩特与大卫-R-奥哈拉伦(著)龚奕利(译)机械工业出版社
—> [3.1] :[3]-第五章-5.7节-357页