科学家近日研发了新系统,在保证准确性的前提下让计算机程序运行的更快。来自麻省理工大学的一支科研团队创造了一项新技术[PDF],通过并行化程序来提高在 Unix shell 中的程序运行速度。这是一个 50 年前创建、至今仍被广泛使用的编程环境。
他们的方法将这些程序并行化,这意味着它将程序组件分成可以在多个计算机处理器上同时运行的部分。这使程序能够在其原始运行时间的一小部分内执行 Web 索引、自然语言处理或分析数据等任务。
麻省理工学院计算机科学和人工智能实验室 (CSAIL) 的研究科学家 Nikos Vasilakis 说:“有很多人使用这些类型的程序,比如数据科学家、生物学家、工程师和经济学家。现在他们可以自动加速他们的程序,而不必担心会得到错误的结果”。
该系统还使开发数据科学家、生物学家、工程师和其他人使用的工具的程序员变得容易。 Vasilakis 补充说,他们不需要对他们的程序命令进行任何特殊调整来实现这种自动、无错误的并行化,他是来自世界各地的研究人员委员会的主席,他们已经在这个系统上工作了近两年。
Vasilakis 是该小组最新研究论文的高级作者,其中包括麻省理工学院的合著者和 CSAIL 研究生 Tammam Mustafa,并将在 USENIX 操作系统设计和实现研讨会上发表。
合著者包括主要作者、宾夕法尼亚大学研究生 Konstantinos Kallas;华沙 Staszic 高中的学生 Jan Bielak; Aarno Labs 的软件工程师 Dimitris Karnikis;前麻省理工学院博士后,现为Google软件工程师的 Thurston H.Y. Dang;史蒂文斯理工学院计算机科学助理教授 Michael Greenberg。
这个名为 PaSh 的新系统专注于在 Unix shell 中运行的程序或脚本。脚本是指示计算机执行计算的命令序列。 shell 脚本的正确和自动并行化是研究人员几十年来一直在努力解决的一个棘手问题。
Unix shell 仍然很受欢迎,部分原因是它是唯一一种允许一个脚本由多种编程语言编写的函数组成的编程环境。不同的编程语言更适合特定的任务或数据类型;如果开发人员使用正确的语言,解决问题会容易得多。
Vasilakis 补充道:“人们还喜欢使用不同的编程语言进行开发,因此将所有这些组件组合到一个程序中是经常发生的事情”。虽然 Unix shell 多语言脚本,但其灵活和动态的结构使得这些脚本难以使用传统方法进行并行化。
当一个程序用一种语言编写时,开发人员有关于它的特性和语言的明确信息,可以帮助他们确定哪些组件可以并行化。但是这些工具不存在用于 Unix shell 中的脚本。用户无法轻松查看组件内部发生的情况或提取有助于并行化的信息。
为了克服这个问题,PaSh 使用了一个预处理步骤,将简单的注释插入到它认为可以并行化的程序组件上。然后 PaSh 尝试在程序运行时并行化脚本的这些部分,在它到达每个组件的确切时刻。这避免了 shell 编程中的另一个问题——无法提前预测程序的行为。
通过“及时”并行化程序组件,系统避免了这个问题。与尝试提前执行并行化的传统方法相比,它能够有效地加速更多的组件。
即时并行化还确保加速程序仍然返回准确的结果。如果 PaSh 到达无法并行化的程序组件(可能它依赖于尚未运行的组件),它会简单地运行原始版本并避免导致错误。