查看原文
其他

新型芯片Swarm:让并行编程更简单

2016-06-21 John IntelligentThings

戳蓝色字关注IntelligentThings




(图片来源于:Christine Daniloff/麻省理工学院)


引言


计算机芯片运算速度的提高,最近已经放缓了。过去十年以来,芯片的性能提高取决于处理单元(核)的组合。理论上讲,一个运行在64核机器上的程序,运算速度应该是单核程序的64倍。但它事实很少是这样。大多数的计算机程序是按时序分成小块,所以能并行进行各种复杂计算。在电气与电子工程师协会的五月/六月的期刊《微》上,麻省理工学院计算机科学和人工智能研究室(CSAIL)的研究人员,展示了一个新的芯片设计,他们称为“Swarm”,让并行计算不仅更加有效,而且更容易写入。


架构的根本和效果


在仿真过程中,研究人员将Swarm版本的六个通用算法,和目前最佳的并行版本进行比较,这些版本曾经由经验丰富的软件开发人员开发。Swarm版本的速度是他们的3到18倍,而且只需要十分之一的代码,或者更少。在有一个案例中,Swarm完成了之前计算机科学家无法进行的并行化程序的加速。


“多核系统十分难以编程,”该项目的领头人,麻省理工大学电气工程和计算机科学专业的助理教授Daniel Sanchez说。“你必须显式拆分在任务中进行的工作,然后在任务访问的共享数据之间,进行一些同步。这种架构的做法,从根本上讲,就是移除各种各样的显式同步,让并行计算更加容易。有些程序很多年来,一直抵制并行化,这些就是我们在这项研究中要关注的。”


使用优先级解决“图”的问题


这些程序,大部分都是计算机科学家称为“图”程序。一个图由结点,通常描述为圆形,和边,通常描述为连接结点的线段。通常来说,边相关的数据被称为“权重”,代表数据集合中数据点的相关度,或者城市之间的距离。


图带来了广泛的计算机科学问题,他们最直观的用途,可能是描述地理关系。实际上,CSAIL的研究人员评估这些算法,来找出两点之间最快的行驶路线。


原则上讲,图搜索,是可以进行并行处理的。不同的核,可以同时分析图的不同区域,或者图上面不同的路径。但是大多数的图搜索算法,有一个问题,当它逐渐地变得清晰,图上所有的区域和要解决的问题无关。如果这样,核将立刻开展任务搜索这些区域,他们的努力将是徒劳的。


当然,对无关区域的徒劳分析,不仅是并行图搜索算法,也是顺序图搜索算法的一个问题。所以计算机科学家已经开发了,许多应用于优先图搜索的应用程序制定的技术。例如,一个算法,可能开始只探索,那些边具有最低权重的路径,或者它可能先从那些具有最少边的结点开始探索。


Swarm和其他多核芯片不一样的地方,就是它具有另外的电路,控制这种类型的优先化 它根据他们的优先级,将任务打上时间戳,然后从最高优先级的任务开始并行处理。高优先级的任务产生它们自己的较低优先级的任务,但是Swarm将他们自动地排成任务队列。


偶然来说,任务并行运行,可能导致冲突。例如,一个低优先级的任务,在高优先级的任务读取同样位置的数据之前,可能向内存中一些特殊的位置写入数据。在这些情况下,Swarm自动的让低优先级任务退出。然后,它维护核之间的同步,访问会引起之前程序员担心的同一数据


实际上,从程序员的观点来说,使用Swarm是非常舒服的。当程序员定义了一个函数,他或者她增加一行代码,将函数加载到Swarm的任务队列中。程序员必须指定度量,例如边的权重或者边的数量。程序用这些数据来排序。通常来说,让Swarm使用现有的顺序算法,只需要加几行代码而已。


事务性内存解决内存访问的问题


最艰巨的任务是芯片本身。Sanchez和Mark Jeffrey 以及 Suvinay Subramanian,都是麻省理工大学电气工程和计算机专业毕业生;Cong Yan,Sanchez小组硕士成员之一和华盛顿大学的博士研究生,以及Joel Emer,在麻省理工学院的电气工程和计算机科学专业工作的教授,以及芯片制造商英伟达的杰出高级研究科学家。他们一起开发了这款芯片。


Swarm芯片具有额外的电路,存储和管理它的任务队列。它也有电路,记录所有核目前的工作数据的内存地址。电路实现了叫做“布隆过滤器”的组件,它将数据塞进一个固定分配的空间中,回答关于它的内容是/否的问题。如果太多的数据要被加载进过滤器,它将偶尔会产生假阳性,表明“是的,我在存储地址。”但是,它将永远不会产生假阴性。


布隆过滤器,是帮助Swarm区分内存访问冲突的其中一个电路。研究人员能够展示时间戳,让核之间的同步更好的进行。例如,每个数据项都具有一个最后更新它的任务的时间戳,所以具有以后的时间戳的任务,会知道他们可以读取数据,而不需要判断有没有另外的人使用它们。最后,所有这些核偶尔报告他们还在执行的高优先级任务的时间戳。如果一个核,结束一个任务。这个任务的时间戳,比他们的伙伴们报告的任务具有更早。它将会知道他可以将它的结果写进内存,而不需要担心任务冲突。


“我相信他们的架构,在对于过去工作中,事务内存和线程级别的猜测方面,有着正确的观点。”Luis Ceze,华盛顿大学计算机科学和工程专业的副教授,说到。“事务性内存,参考一种机制,保证多处理器并行运行,并且相互不冲突。它保证有序的更新共享内存位置的数据。线程级的思考,是一个相关的技术,使用事务性内存的创意来进行同步:这么做不需要确保任务是并行的,如果不是,连续的重做和重新执行。Sanchez的架构,创造性地使用了这些想法和技术中,很好的部分。”




如果大家有什么关于物联网,智能硬件,创新方向的技术或者产品问题想了,请写评论告诉IntelligentThings,我会定期参看大家的问题,并选择一些来回答。





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存