- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
交易无处不在
布拉德利C. Kuszmaul和查尔斯E. Leiserson,SMA研究员
麻省理工学院计算机科学实验室
附:(原文网址) /handle/1721.1/3692
(在页面Files中的CS028.pdf打开即可)
摘要:可以说,对于可能宁愿选择写并行代码的软件开发人员来说,最大的deterrants之一是并行可以使他们的生活更复杂。也许最根本的问题在于并发任务的协调固有原子,使一个执行任务的部分结果不小心损坏的另一个任务。原子通常是通过执行锁定协议,但这些协议可以引进其他并发症,如死锁,除非其使用方法是采用限制性。我们最近已经开始了一项关于事务内存[18]作为一个负责执行的原子性的研究项目,因为它允许用户避免锁定协议的许多并发症。
而不是在一个方案里把交易事务看成偶然的事件,正如过去普遍进行的交易,我们已经采用这样的观点,所有的用户代码应该执行一些交易事务的上下文。为了使这个观点可行,需要两个关键技术的发展:可扩展的事务性内存有效的硬件支持,以及语言和编译器的支持。本文介绍了我们的初步研究成果关于制定“交易无处不在”的实践性的现实。
Ⅰ、介绍
十年前,在开创性论文中,Herlihy和莫斯[18]提出,把事务性内存作为一种方法来缓解并发的程序编写。事务内存是有时被描述为一个负载链接/条件存储[24]和其他复杂指令扩展。而事务性内存的想法是允许一个程序来读取和修改作为一个单一的原子操作多个不同的存储单元,很像发生在一个数据库事务[14],[15]中。对于事务性内存,他们认为,程序员可避免如优先级反转,护航,和死锁等这样的并发异常。 Herlihy和莫斯提出了一个扩展的硬件高速缓存一致性机制,可以有效地提供硬件事务内存(HTM)。
传统的方法来指定使用事务的原子是由文本上标记的开始和结束交易而完成。在事务内,所有的结果都是“沙箱”,这意味着在交易书面上的值暂时搁置,直到事务结束,而此时事务提交,所有的这些值被原子性地制成全局可用的。如果交易不能以任何理由提交,提交中止操作并返回一个代码,且没有全球性的更改。否则,它返回一个致力于代码,使全球所有的变化都可见。如果此交易中止,它通常是程序员的责任重新再去试做交易。
这种简单的事务性内存取代传统的观点与事务性协议的锁定协议。此外,研究人员之间的共同看法似乎是,交易事件很少发生(如为了证明隐式而设计和已提出的[18],[28]隐码),并具有很高的开销。许多研究人员都把努力集中在软件事务内存(STM)[30],[17],[16]上,导致对HTM探索缺乏。
我们认为事务性内存的真正优势在于,程序员可以在很大程度上从编写和调试同步协议中解脱出来。而不是把交易视为罕见的,我们的研究探讨了交易的概念无处不在:用户代码总是在一些事务中执行。这种观点的极端点都需要语言和硬件的支持。在本文中,我们描述了我们对各地正当理由交易做法的研究进展, 为使熟悉电脑的内存作为高速缓存子系统HTM。
本文的其余部分概述了我们的研究在迄今取得的进展。第二节介绍了适应软件开发HTM,重点在语言问题和编译器技术上。第三节描述了我们修改Herlihy和莫斯的计划,使其有可扩展性以及我们如何设计a Bluespec硬件规格和规划HTM去测量费用。最后,我们在第四节提供了一些结论。
II、HTM的语言和编译器支持
我们初步对HTM语言上支持的调查是专注于在Cilk [2] [3],[25],[34],[12]内提供的“隐”原子,这是一种我们的研究小组开发的多线程编程语言,其特点是可证明高效,随机,“workstealing”调度。目前的Cilk - 5.3.2版本是使用锁来实现原子性的,但我们希望要研究的是如何去用HTM来消除锁和其他并发协议使用。特别是,我们正在研究对哪些交易可以指定隐含的程度,而不是明确。
在本节中,我们首先提供了Cilk.1的简要介绍,然后我们描述了我们对扩大Cilk指定的原子性的建议。最后,我们报告了一些关于这种语言的扩展影响的初步研究。
多线程的Cilk语言扩展了C编程语言的五个关键字:
Cilk在前一个函数的定义表明该功能可以在并行中运行;
产卵前的一个Cilk函数调用表明该呼叫可以与调用者在并行中执行;
同步等待,直到所有的衍生功能已经完成;
进口允许从产生函数的结果被纳入一个用户定义的方式调用者纳入其中;
中止停止产生一个函数的执行。
Cilk是C编程语言的一个忠实的扩展:如果并行控制Cilk关键字是从Cilk程序,语法和语义上正确的C程序结果的省略。因此,仅仅通过#defineing所有Cilk关键字为零,一个Cilk程序就变成一个普通的C程序。
目前Cilk - 5.3.2版本使用互斥锁来实现数据结构时,就同时经营了Cilk线程。锁定引入了许多并发异常,如死
文档评论(0)