文件名称:编译优化-analysis i terence tao third edition
文件大小:4.28MB
文件格式:PDF
更新时间:2024-06-27 22:51:54
OpenMP
3.3 编译优化 采用标准 C 代码作为输出的源代码级别的 OpenMP 编译虽然具有良好的可移植性和平台 无关性,但是这种方案将 OpenMP 编译与后端的优化编译器分割开来,因此限制了线程级并 行与指令集并行性开发之间的交互,使得很多优化方法无法实施。如果采用另一种实现方式, 将 OpenMP 的翻译作为后端工作的一部分(牺牲了可移植性),此时由于 OpenMP 翻译、优 化与面向指令级并行性的编译和优化可以共同在中间表示的层面上开展,可以灵活安排优化的 相对顺序,也可以方便地在各种不同的分析、优化过程之间传递信息,因此可以获得比源代码 级翻译更多的优化机会。但是即便采用源代码级的翻译,也可以在并行域的合并、冗余制导指 令消除以及针对变量的数据属性进行优化。 另外在与运行库方面,也有许多优化技术,比如采用开销更小的线程库、针对 NUMA 架 构利用局部性原理对数据分配和线程与处理器和的绑定等等技术来提高性能。 本书作为入门级参考材料,并没有对性能优化进行讨论,需要读者自行阅读相关论文和书 籍。 3.4 小结 本章介绍了 OpenMP 编译的狭义定义,简单分析了相应的编译器的基本构件:词法分析 模块、语法分析模块、语义分析模块、中间代码生成、代码优化模块、目标代码生成以及符号 表管理和错误检查。其中词法分析中要注意 OpenMP 与 C 语言共用关键字的区分,语法分析 程序需要能在 C 语法基础之上识别 OpenMP 制导指令的语法,中间代码选取 AST 以便保留源 代码的语法层次结构,目标代码生成中需要翻译 OpenMP 的并行语义。通过简单的介绍,在 复习编译原理的基础之上初步了解 OpenMP 编译所涉及的几个问题,形成初步的概念。