V 优化程序性能

以下内容参考自data whale 组队学习

程序性能表示

对于一个程序,如果我们记录该程序的数据规模以及对应的运行所需的时钟周期, 并通过最小二乘法来拟合这些点,我们将得到形如 y = a + bx 的表达式,其中 y 是 时钟周期,x 是数据规模。当数据规模较大时,运行时间就主要由线性因子 b 来决 定。这时候,我们将 b 作为度量程序性能的标准,称为每元素的周期数(Cycles Per Element, CPE)。

优化性能的方法

1. 代码移动:将重复计算且保持不变的部分移出去;

2. 减少过程调用:注意有时候循环中有其他操作可能是瓶颈,这样的操作可能无效;

3. 消除不必要的内存引用(内存重复读写);

4. 循环展开: 通过增加每次迭代计算的元素数量来减少循环的迭代次数。(注意一旦展开的次数过多,没有足够的寄存器保存 变量,那么就需要将变量保存到内存中,这就会导致访存时间消耗增加,也很可能在寄存器溢出之前就达到吞 吐量限制,从而无法持续提升性能。)

现代处理器的优化

* 超标量(superscalar):可以在每个时钟周期执行多个操作。

* 乱序的(out-of-order):指令执行的顺序不一定与机器级程序中的顺序一致。

于是,这样的设计之下有了:

1. 分支预测(branch prediction)技术:来预测是否需要选择分支,同时还预测分支的目标地址。

2. 投机执行(speculative execution)技术:处理器会在分支之前就执行分支之后的操作。如果预测错误,那么处理器就会将状态重置到分支点的状态。

并行计算

数据级并行(data parallelism):  同一操作被并行地应用于许多数据元素

任务级并行(task parallelism):在子程序下处理。

并行计算机架构:

1. 「 单指令单数据 」(Single Instruction Single Data,SISD):这是传统的CPU结构:在任 何时候只有一条指令被执行,对一个数据项进行操作。

2.  「单指令多数据 」(Single Instruction Multiple Data,SIMD):在这种计算机类型中, 可以有多个处理器,每个处理器对自己的数据项进行操作,但它们都在对该数据项执行相 同的指令。向量计算机(2.3.1.1节)通常也被定性为SIMD。(数组的操作表现出色),如GPU。

3. 「 多指令单数据 」(Multiple Instruction Single Data,MISD):目前还没有符合这种描 述的架构;人们可以说,安全关键应用的冗余计算就是MISD的一个例子。

4. 「 多指令多数据 」(Multiple Instruction Multiple Data,MIMD):这里有多个CPU对多 个数据项进行操作,每个都执行独立的指令。目前大多数并行计算机都属于这种类型。

进程与线程

进程:内存中拥有:

* 程序代码,以机器语言指令的形式存在。 

* 堆 (heap),包含malloc创建的数组。

* 栈 (stack),包含快速变化的信息,如「 程序计数器 」(program counter,PC), 它显示了当前正在执行的结构。堆栈中包含快速变化的信息,如表明当前正在执行的程序计数器,以及具有本地范围的数据项,以及计算的中间结果。

线程:看到相同的程序代码和堆,但它们有自己的栈.主要特征是它们可以在相同的数据上进行协作.



并行

任务 并行」(task parallelism)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容