神威平台上AceMesh编程模型的构图优化
2021-07-24叶雨曦梁建国孟现粉
叶雨曦,傅 游,梁建国,孟现粉,刘 颖,花 嵘
(1.山东科技大学 计算机科学与工程学院,山东 青岛 266590; 2.中科寒武纪科技股份有限公司, 北京 100191; 3. 中国科学院计算技术研究所,北京 100190)
任务并行编程模型把任务作为并行的基本单位,为编程人员提供任务划分和任务同步接口。编程人员需要考虑如何对应用程序进行合理的任务划分,而任务具体的要在哪个物理核上执行以及如何实现任务之间的同步都由运行时系统完成。任务并行编程模型可看作底层体系结构和上层程序应用之间的桥梁,向上隐藏并行处理的细节,提高编程层次,简化并行编程;向下充分利用硬件资源,高效正确地执行并行程序[1]。支持任务并行调度的并行编程模型主要有MIT的Cilk[2]/Cilk++[3]、Intel的Threading Building Blocks(TBB)[4]、BSC的OmpSs[5]、微软的Task Parallel Library(TPL)[6]等。
中国科学院计算技术研究所并行编译组提出了一种面向网格应用,以数据为中心,应用于多核、众核平台上的任务并行编程模型AceMesh[7-10]。AceMesh主要包括编译器和任务调度系统。AceMesh编译器作为一个源到源编译框架[5],根据平台特性将带指导语句的程序代码自动生成指定平台的并行化程序,编程人员只需要关注指导语言和应用本身即可。AceMesh任务调度系统采用基于有向无环图[11](directed acyclic graph,DAG)的动态任务调度,能自动发掘结构化网格应用中存在的数据驱动的任务图并行性,其性能较其他的任务并行编程模型优越[12-13]。
AceMesh作为数据流驱动的任务并行模型,细粒度的任务划分会使其构图开销显著增加,降低应用的并行可扩展性。……
