芯片设计为更快的并行编程创建

麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员开发了一种名为Swarm的芯片设计,旨在使并行程序更高效,更容易编写。

通过Larry Hardesty,麻省理工学院新闻办公室 2016年7月9日

计算机芯片的速度已经停止了增长。在过去的10年里,芯片性能的提高来自于被称为核心的处理单元的增加。理论上,64核机器上的程序速度是单核机器上的64倍。然而,它很少以这种方式工作。大多数计算机程序都是连续的,将它们分开以便它们的块可以并行运行会导致各种各样的并发症。

麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员开发了一种名为Swarm的芯片设计,旨在使并行程序更高效,更容易编写。

在模拟中,研究人员将6种常见算法的Swarm版本与现有最好的并行版本进行了比较,这些并行版本是由经验丰富的软件开发人员单独设计的。Swarm版本的速度是前者的3到18倍,但通常只需要十分之一的代码,甚至更少。在一个案例中,Swarm将计算机科学家迄今未能并行的一个程序的速度提高了75倍。

“多核系统真的很难编程,”麻省理工学院电气工程和计算机科学系的助理教授丹尼尔·桑切斯(Daniel Sanchez)说,他领导了这个项目。“你必须明确地将你正在做的工作划分为任务,然后你需要在访问共享数据的任务之间强制一些同步。从本质上讲,这个体系结构所做的是删除所有类型的显式同步,从而使并行编程更加容易。有一组特别难处理的应用程序已经抵制并行化很多年了,这就是我们在本文中关注的应用程序类型。”

其中许多应用都涉及到对计算机科学家所称的图的探索。图由节点(通常表示为圆)和边(通常表示为连接节点的线段)组成。通常,这些边都有被称为“权重”的相关数字,这些数字可能表示数据集中数据点之间的相关性强度,或者城市之间的距离。

图形在广泛的计算机科学问题中突然出现,但它们最直观的用途可能是描述地理关系。事实上,CSAIL研究人员评估的算法之一是寻找两点之间最快行驶路线的标准算法。

设置优先级

原则上,图的探索似乎是可以并行化的:不同的核心可以同时分析图的不同区域或图中的不同路径。问题是,对于大多数图探索算法,图的整个区域都与手头的问题无关,这一点逐渐变得清晰起来。如果一开始,核心就被赋予了探索这些区域的任务,那么他们的努力最终将是徒劳的。

对不相关区域的无结果分析也是序列图探索算法的一个问题;不只是平行的。因此,计算机科学家已经开发了一系列特定于应用程序的技术来确定图探索的优先级。例如,一个算法可能从探索那些边权值最低的路径开始,或者它可能首先查看那些边数最少的节点。

蜂群有额外的内置电路来处理这种优先级。它会根据任务的优先级给任务打上时间戳,并开始并行处理优先级最高的任务。高优先级的任务可能会产生它们自己的低优先级任务,但Swarm会自动将这些任务插入到它的任务队列中。

偶尔,并行运行的任务可能会发生冲突。例如,低优先级任务可能会在高优先级任务读取相同位置之前将数据写入特定内存位置。在这种情况下,Swarm会自动回退低优先级任务的结果。因此,它维护了访问相同数据的核心之间的同步,而以前程序员必须自己操心这些数据。

动向

艰苦的工作落在了芯片本身,桑切斯与麻省理工学院电气工程和计算机科学研究生马克·杰弗里和苏维奈·萨勃拉曼尼亚合作设计了芯片;丛燕(Cong Yan)是桑切斯团队的一员,她的硕士学位是桑切斯团队的一员,现在是华盛顿大学的博士生;Joel Emer,麻省理工学院电气工程和计算机科学系的实践教授,芯片制造商NVidia的高级杰出研究科学家。

Swarm芯片有额外的电路来存储和管理它的任务队列。它还有一个电路,可以记录其核心当前正在处理的所有数据的内存地址。该电路实现了一种称为Bloom过滤器的东西,它将数据塞进固定分配的空间,并回答关于其内容的是/否问题。如果在过滤器中加载了太多的地址,它偶尔会产生假阳性——表示“是的,我正在存储该地址”——但它不会产生假阴性。

Bloom过滤器是帮助Swarm识别内存访问冲突的几个电路之一。研究人员能够证明,时间戳使核心之间的同步更容易执行。例如,每个数据项都标有更新它的最后一个任务的时间戳,因此具有较晚时间戳的任务知道它们可以读取该数据,而不必费心确定还有谁在使用它。

最后,所有核心偶尔会报告它们仍在执行的最高优先级任务的时间戳。如果一个核心完成的任务的时间戳比其他核心报告的任何任务都要早,它知道它可以将结果写入内存而不会引起任何冲突。

麻省理工学院

www.mit.edu

-由克里斯·瓦夫拉编辑,制作编辑,控制工程, CFE传媒,
cvavra@cfemedia.com.查看更多控制工程能源和电力故事