相比之下,OpenCilk
的设计允许我们通过仅更改运行时系统
的代码库来向OpenCilk运行时系统添加DPRNG支持。此外,
这种模块化不会
牺牲性能。OpenCilk运行时系统,
修改,以
提供两种机制,以支持DPRNG,运行
的几何平均速度比
Cilk Plus运行时系统,它只提供了一个这样的机制5%。
最 后 , 为 了 证 明 OpenCilk 产 生 高 性 能 代 码 , 我 们 使 用
OpenCilk编译了15个基于C/C++的fork-join
并行程序,这些
程序可以在OpenCilk运行时 、Cilk Plus运行时 [36]、
OpenMP运行时[61]或oneTBB [39]上运行,我们比较了
结果可执行文件的性能。图1显示了结果。
5
在图中,左图
显示了每个可执行文件
右边的图显示了每个可执行
程序
的48核加速比,48除以使用OpenCilk运行时的相
应可执行程序的48核加速比
。 如图所示,OpenCilk运行
时系统
始终提供与其他运行时系统相当或更好的工作效率
和加速。特别是,在48个核心上,OpenCilk运行时的几何
平 均 速 度 比 Cilk Plus 快 10% ,
比 oneTBB 快 50% , 比
OpenMP快120%。
总之,本文的贡献如下:
第2节介绍OpenCilk,一个开
源的软件
基础设施fork-join并行,包括编译
器,运行时系
统,和工具开发框架工作。OpenCilk采用了几个新颖的
设计功能,包括Tapir降低框架和位代码ABI
,使其模块
化,易于扩展和快速。
第3节展示了OpenCilk比传统方法更容易扩展通过几个
案例研究,我们说明了OpenCilk的设计如何使其易于添
加
5
附录
A
给出了这些图的运行时间数据
新的语言抽象、运行时机制和快速
生产力工具。
第4节演示了OpenCilk在实践中产生高
性能代码,并根
据经验评估了
使用第3节中讨论的OpenCilk基础设施构建
的运行时扩展
。
第5节讨论了相关的工作,第6节提供了结论
性的评论。 附录
A描述了如何设置OpenCilk
和基准程序来运行本文中的实证
评估
。
2 OpenCilk系统架构
本节介绍OpenCilk系统架构以及
使其易于修改和扩展的功
能。 OpenCilk
包括一个编译器,一个工作窃取运行时系统
[12],
以及一个用于开发生产力工具的框架,包括
一个竞争
检测器和一个可伸缩性分析器。 图2展示
了OpenCilk系统
架构,其中突出
显示了关键方面. OpenCilk编译器引入了统
一的Tapir
降低框架,以将任务并行程序编译到不同的并行
运行时系统,以及Momme框架,以支持生产力工具的开
发。图
2还显示了OpenCilk运行时系统和OpenCilk工具
如何实现为
传统库和位代码ABI的组合,以使它们易于
修
改和扩展而不牺牲性能。
预赛
OpenCilk支持(递归)fork-join并行,其中
函数可以
产生子
任务,从而允许它
与
其父任务
的延续并行执行。一个
函
数也可以执行
同步
,以等待它的所有派生子任务完成。任
务本身可以产生和同步子任务。我们将执行派生的任何函数
或任务
称为
派生函数
。
目前,OpenCilk编译器支持
使用Cilk语法编写的基于
C/C++的fork-join并行代码和
多个运行时系统后端,包括
OpenCilk