自编教材分享:第一章—程序性能优化的意义(二)



本次主要从存储结构的发展、编译器能力的局限、编程模型的局限三个方面分享程序性能优化的意义。
存储结构的发展
在过去的几十年中,处理器性能以每年50%至100%的速度平稳增长,而存储器的性能却只以每年7%左右的速度增长,可以断言的是未来处理器与存储器之间的速度差异将会越来越大。一般进行乘法运算大约需要6个时钟周期,除法运算大约是20个时钟周期。一次内存访问就需要200个时钟周期,计算与访存之间的延迟非常大。所以存储系统仍将是影响整个计算系统性能的一个关键瓶颈。

现代处理器采用了多层次的、容量和性能不同的缓存,其中上一级缓存容量比下一级缓存小,但是延迟更小、带宽更大。如图展示了越靠近 CPU 的存储器速度越快,容量越小,每比特价格越高;而越远离CPU的存储器速度越慢,容量越大,每比特价格越低。如何让处理器的访问尽可能地发生在距处理器较近、访问时间较短的存储层次中是减少处理器访问延迟的关键。

距离处理器不同远近的存储层次的性能指标统计。

编译器能力的局限
编译器作为人机语言交互的桥梁,其功能是将程序员编写的高级语言程序翻译成面向目标机器的可执行程序。一个编译器的好坏取决于他的优化能力,它需要根据指令集的特点将代码尽可能的优化,以得到更快的执行速度
并行化编译系统已成为高性能计算机系统中重要的组成部分,该编译系统通过自动检测程序中潜在并行性,将原始的串行语法成分自动地转变为等价的并行语句,极大地减少了程序员改写并行程序的工作量。

影响编译器效果的原因
影响编译器效果的原因概括为如下:
编译器采用的程序静态分析技术自身有能力的局限。
编译策略的保守性原则制约了编译优化的能力。
编译器要在通用性和高效性之间保持微妙的平衡。
编译器采用何种优化策略还要考虑用户对编译时间的容忍度。
体系结构与计算器件的快速升级与迭代对编译器充满挑战。
编程模型的局限
并行编程模型通过抽象并行计算机体系结构,提供给程序员一种方便与算法结合的编程逻辑,常见的编程模型如CUDA、OpenACC、OpenCL、OpenMP、MPI等。但是当前的并行编程模型也有其局限性,如OpenMP主要针对于共享存储结构,MPI主要针对与分布存储结构。
为了减轻程序员的编码负担,编程模型倾向于隐藏底层设备的细节,但也意味着可能会限制了程序与底层硬件的深度结合,而使程序失去了获得更高性能的机会,表现在以下三个方面:
编程模型无法充分表达程序的理想性能。
编程模型无法充分发挥硬件的计算性能。
编程模型对硬件支持的局限性也会引起程序性能的降低。
参考资料
[1]李明亮.面向多核和众核的跨架构程序移植关键技术研究[D].战略支援部队信息工程大学,2021.DOl:10.27188/d.cnki.gzjxu.2021.000074.
[2]邓豹,孙靖国.国产嵌入式处理器发展综述[J].航空计算技术,2021,51(01):120-124.
课程书籍


