从讲授Fortran到优化编译器

弗朗西斯·伊丽莎白·艾伦(Frances Elizabeth Allen,1932—2020)是美国计算机科学家,长期在IBM研究编译器、程序分析与自动并行化。她曾任中学数学教师,1957年在密歇根大学获得数学硕士学位,同年加入IBM。最初的任务是向研究人员讲授刚问世不久的Fortran,这也成为她研究高级语言如何落实为高效机器程序的起点。

在Stretch-Harvest项目中,她参与Alpha语言及其编译系统,面对的是大型机器和专门应用的实际需求;随后又参加Advanced Computing System的实验编译器工作。她关心的不只是把语句逐条翻译,而是分析整个程序的结构,再寻找不改变既定计算含义的改写机会。高级语言是否可用,与编译器生成代码的质量紧密相关。

参考:[1] [2]

先弄清数据来自哪里

程序里同一个变量可能在不同分支被赋值,随后又在汇合点读取。优化器若想复用先前计算的结果,必须弄清哪些赋值可能影响当前位置;若不区分路径,就可能把已经失效的数值当作仍然有效。这里需要的是静态分析,而不是只观察一次运行记录。

艾伦与约翰·科克合著、1976年发表于《Communications of the ACM》的数据流分析论文,研究哪些定义可能到达控制流图的各节点,以及哪些定义在图的边上仍然活跃。IBM保存的摘要说明,该方法采用按区间组织的边表,并同时处理可约图与不可约图。分析结果为后续程序转换提供信息,但“可能到达”不等于每次运行必然经过相同路径。

这类工作把优化需要的判断组织为可计算的问题。是否实施某项转换,还要看语言规则、目标机器及编译成本。这类分析算法并不保证“所有程序都会快若干倍”,相关研究由艾伦与科克共同完成。

参考:[3]

用共同系统检验并行化思想

艾伦后来领导PTRAN并行翻译研究。目标不只是要求程序员重写程序,而是让编译系统发现原有代码中的可并行部分。并行机会受到数据依赖限制:必须先产生才能读取的结果,不能仅因拥有更多处理器就任意调换执行顺序。IBM将她的跨过程分析与自动并行化工作列为其研究的重要组成。

在2001年的口述访谈中,艾伦强调PTRAN同时需要理论和实验:团队维护可共同使用的系统,让研究者在其中检验各自想法,形成论文,也将部分技术转入产品。她当时的主要职责包括营造研究环境,而不是亲自包办全部设计与实现。

她1989年成为首位女性IBM Fellow,并获得2006年度图灵奖。与这些荣誉相对应的是长期的研究组织及指导工作:把抽象分析放进能运行真实程序的工具,也让年轻研究者拥有能够独立负责、署名和继续发展的课题。

参考:[1] [2]