没有合适的资源?快使用搜索试试~ 我知道了~
Nonio-面向现代编译器的模块化自动编译框架架构和性能优化
软件X 10(2019)100238原始软件出版物Nonio-面向现代编译器的模块化自动编译阶段选择和排序专门化框架Ricardo Nobre,João Bispo,Tiago Carvalho,João M.P.卡多佐波尔图大学工程学院和INESC TEC,Rua博士。Roberto Frias,s/n.4200-465波尔图,葡萄牙ar t i cl e i nf o文章历史记录:2018年8月3日收到收到修订版2019年2月26日接受2019年保留字:搜索器优化设计空间探索标志选择性能a b st ra ct本文介绍了Nonio,一个模块化的,易于使用的,设计空间探索框架,探索编译器标志和编译器序列的自定义组合。我们描述了这个框架,并讨论了它与两个最流行的编译器工具链GCC和Clang+LLVM的使用特别是,我们讨论了在使用GCC时的标志选择以及使用Clang+LLVM时的阶段选择和排序的框架软件组织允许容易地添加新组件作为插件(例如,探索算法、客观度量、与另一编译器工具链的集成)。软件架构提供了定义良好的接口,以实现不同组件之间的无缝组合和交互。作为一个例子,我们提出了一个用例,其中我们依赖于Nonio来获得自定义编译器标志,以减少C程序的执行时间和能耗,这与编译器提供的最佳预定优化设置有关(例如,©2019作者由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本v2.0用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2018_135GNULesser General Public License v3.0使用git的代码版本控制系统软件代码语言、工具和服务使用LARA、JavaScript、Clava。编译要求,操作环境&依赖性Java语言。如果可用,链接到开发人员文档/手册问题支持电子邮件rjfn@fe.up.pt,jbispo@fe.up.pt1. 动机和意义当代编译器,如GCC [1]和LLVM [2],允许用户访问数百个分析和转换编译器通道。这些编译器传递可以在编译器的优化路径中被激活/停用预定义的编译器通道序列(例如,in-*通讯作者。电子邮件地址:rjfn@fe.up.pt(R.Nobre),jbispo@fe.up.pt(J. Bispo),tdrc@fe.up.pt(T.Carvalho),jmpc@acm.org(J.M.P. 卡多佐)。https://doi.org/10.1016/j.softx.2019.100238为专用于给定应用的编译器序列留下了开放的机会。在从嵌入式到高性能计算(HPC)的许多领域的背景下,支持用户实现进一步性能改进的框架的存在是非常重要的。相位选择和相位排序已经被证明是编译器优化的重要正交方法[3编译器用户可以利用这两者来进一步优化为他们的功能和/或程序生成的代码,考虑到特定的计算平台,例如特定的CPU或GPU,以及度量,例如关于执行时间,能耗或代码大小的优化。为了解决相位选择和/或相位排序问题,基于枚举和基于机器学习(ML)的方法或两者的组合已经被提出,2352-7110/©2019作者。 由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softx2R. Nobre,J.比斯波,T.Carvalho等人粤ICP备10023888号-1+一些作者。不幸的是,与包括在现有技术中的方法相关的实验的再现性往往是困难的,我们认为这对于该领域的快速发展是必不可少的。所提出的设计空间探索(DSE)算法的大多数实现不是公开可用的,并且关于如何开发用于实现DSE方案的软件的一般知识可能难以获得。执行编译器阶段选择/排序的自动DSE需要特定的技术诀窍,例如,能够使用所关注的平台所需的模拟器/板这些方面造成了理解现有文学作品和用新的和创新的思想改进文学作品的困难我们认为,这可能导致该领域的进展大大已经提出了许多框架/工具,允许探索编译器阶段选择/排序的实际目的和/或然而,大多数现有的框架/工具缺乏灵活性,不是开源的和/或目前没有维护。有些与单个编译器工具链、单个目标平台、单个客观指标集和/或非常具体的探索算法紧密相关。例如,ACOVEA [13]使用遗传算法来搜索合适的标志,以便使用GCC编译C和C++程序AcovSA [14]具有相同的功能,但使用模拟退火。这是一个例子,其中两个单独的工具实际上是相同的,除了探索算法。另外,由于它们与GCC绑定,因此它们只支持阶段选择。MILEPOST GCC [3]是一种自适应的社区驱动编译器,它将扩展GCC与反馈导向编译相结合,并使用能够预测编译标志的机器学习插件来实现,以改善程序执行时间,代码大小和编译时间。COLE [4]是一种用于导出Pareto最优优化水平的框架,它依赖于多目标进化搜索,并已用于导出GCC的优化标志集,表明默认优化水平可以大大提高。类似地,TACT [7]包括一个支持使用遗传算法优化多个目标的工具,该算法已用于为GCC导出Pareto最优编译器标志集。COBAYN [11]和MICOMP [12]是编译器自动调优框架的其他示例。前者依赖于贝叶斯网络和独立的微架构特征来导出GCC的一组标志,而后者依赖于预测模型来导出LLVM的编译器阶段顺序。我们开发了一个名为Nonio的开源DSE框架,主要结构如图所示。1.一、我们相信Nonio有潜力加速编译器阶段选择和阶段排序领域的Nonio是模块化的,用户可以轻松地添加对新微架构/设备、新指标、新DSE方法和新编译器工具(甚至是新的源编程语言)的支持。这为研究人员和编译器用户探索编译器阶段选择和/或排序提供了可观的投资回报 时间来学习如何从用户的角度和/或研究人员的角度来操作该工具),并允许研究人员/用户更多地关注他们试图解决的具体问题。例如,使用Nonio进行编译器阶段排序研究的人可以开发新的DSE方案,而不必关心如何交互1 “诺尼欧”(英语:Nonius)是一种用于导航和天文学的测量工具,以其发明者佩德罗·努涅斯(拉丁语:Petrus Nonius)的名字命名,葡萄牙作家、数学家和航海家。诺尼奥在探险时代帮助过Fig. 1. Nonio框架:(1)示例:ClavaLARA方面,用于关于给定度量的优化;(2)使用LARA和DSE算法的DSE循环。具有特定的编译器,或者被绑定到特定的度量和/或目标计算平台。人们可以评估和验证新方法,同时依赖于支持的目标平台和优化指标的模块,这些模块已经实现并与Nonio捆绑在一起。2. 软件描述2.1. 软件构架Nonio是用LARA [15]编程的,LARA是一种用于源代码分析和转换的领域特定语言(DSL)。框架的软件由LARA解释器、DSE算法和DSE循环组成,所述DSE循环能够执行从编译到执行(或模拟)的一组步骤,并且与来自每个测量的信息反馈(例如,使用执行/模拟)。为了自动化输入应用程序的源代码的插装,并使用测量要改进的度量所需的代码,用户可以依靠Nonio框架中可用的插装策略的支持,并使用Clava 2自动应用它们,Clava 2是一个C/C++源到源编译器。否则,用户可以手动检测源代码或使用另一种工具来检测源代码和测量所需的代码。Nonio由五个主要组件组成:Metric,Language,Quancher,Platform和Algorithm。Metric负责指定要用于评估程序执行的度量(例如,根据执行时间、能量消耗)。语言组件包含有关如何处理特定编程语言的应用程序源文件编译器组件从语言组件接收要编译的文件,并生成要执行的二进制文件这些二进制文件由平台执行(例如,主机系统、模拟器、开发板)。基于执行测量,算法组件生成下一组要测试的编译标志,这些标志被传递到编译器组件,再次重复该过程。2 Clava提供对C、C++和OpenCL代码的插装支持,在Java虚拟机(JVM)上运行 , 并 已 在 Windows 、 Linux ( Ubuntu 和 CentOS ) 和 MacOS 上 进 行 了 测 试 。https://github.com/specs-feup/clava网站。R. Nobre,J.比斯波,T.Carvalho等人粤ICP备10023888号-13公开的Nonio版本包括特定文件夹下的不同类型的组件(即,算法、平台、编译器、语言、度量)。可以通过在相应的文件夹中填充更多条目来扩展Nonio DSE系统2.2. 扩展NonioNonio的组件可以扩展以满足不同的需求。下面的小节简要描述了如何扩展Nonio的每个2.2.1. 编译器添加对不同编译器工具链的支持通过以下方式实现:(1)在文件夹编译器下创建新文件夹,其名称标识对DSE工具的调用中的编译器;(2)创建标识要探索的遍和/或标志的配置文件,并标识用作计算用DSE实现的改进的基线的优化策略(例如,标准优化级别);以及(3)为编译器支持的每种语言创建文件夹(例如,C、C++),并在Dsearcher.lara文件中添加,该文件实现了该语言的编译器的编译阶段。在LLVM的情况下,函数Dsearcher.frontend()负责从具有 要 优 化 的 代 码 的 源 文 件 生 成 中 间 表 示 ( IR ) , 函 数DseComer.opt() 调 用 具 有 特 定 编 译 器 阶 段 顺 序 的 LLVMOptimizer工具,函数DseCom-piler.backend()调用LLVM静态编译器生成汇 编 代 码 从 优 化 的 IR 产 生 的 关 键 步 骤 。 函 数DseComer.compileLauncher()com-堆剩余的C代码(在包含 要 优 化 的 函 数 的 C 代 码 源 文 件 之 外 ) , 函 数DseCom-piler.link()将从优化的函数生成的程序集与剩余代码(包括main())链接。此版本的Nonio包括对编译器GCC(gcc)和Clang+ LLVM(llvm)的支持2.2.2. 平台与算法和编译器类似,平台是自定义LARA包,在本例中使用标记(平台)。 每个文件夹代表一个平台,包含用于专门化DSE步骤的LARA文件,包括可用的指标或如何调用可执行文件。在每个平台的文件夹中,JSON格式的配置文件,其中包含针对平台时每个编译器可用此版本的Nonio包括OpenRISC 1200模拟核心(orpsoc-or1200)和主机(host- intel)。2.2.3. 度量LARA语言提供了一个API,用于在源代码中测量任意指标。 通过创建新的LARA文件,实现接口Metric(属于lara.metrics包),并使它们作为包含文件可用,可以添加新的指标。 通过使用实用程序方法DsePlatform将服务器关联到平台。_ addMetric可以在DSE过程的初始化期间被添加,并且可以特定于该平台(例如,当提取度量需要与模拟器交互)。Metric接口基于两种方法:仪器和报告。如果需要,仪器将引入执行相关测量所需的代码。在当前的Nonio实现中,当以C/C++代码为目标时,测量代码为方法报告可以访问有关程序执行的信息,例如执行的输出、返回值、执行的文件或执行文件夹,并基于此信息提取相应的度量。执行LARA代码的编译器(即,在本例中,Clava)负责为度量度量标准插装代码。在Clava的情况下,它支持使用C和C++库插入用于测量时间的编译代码,并根据语言插入不同的代码(例如,如果编译C++,则使用include)和目标平台(e.g.、如果编译到Linux,则使用)。为了测量能量,Clava使用基于英特尔RAPL的自定义库3接口.此版本的Nonio包含度量性能(执行时间)、能量(消耗的能量)和大小(二进制文件大小)。2.2.4. 算法可以通过向文件夹算法添加新文件夹来添加新DSE算法。此文件夹应包含实现接口DseAlgo的LARA文件,该接口接收参数,如探索值和最大迭代次数。为了说明的目的,图。 2描述了一个简单探索算法的LARA实现,它使用了DseRun类中的几个实用方法。该算法基于可用编译标志的列表(即,数组exploreParams)。此版本的Nonio包含一个执行均匀随机采样(随机)的算法,一个单独测试每个可用标志(单独)的算法,一个评估候选编译器阶段选择/排序(插入)中编译器通道插入的算法,以及一个模拟退火算法(sa)。2.2.5. 语言对自动插装的支持取决于用于执行Nonio的LARA兼容工具此版本的Nonio准备与Clava源到源编译器一起运行,该编译器支持C和C++。然而,Nonio可以与其他编程语言的输入应用程序一起使用,只要用户提供目标度量的度量。对每种源语言的支持是通过向文件夹语言添加一个文件夹,并添加一个实现接口DseLanguage的LARA文件来实现的。当添加新语言时,在compilers文件夹中至少应该有一个编译器支持新语言。3. 说明性示例新的DSE进程通过带有配置文件的命令行启动属性文件),其包含表示多个通用探索变量的参数,诸如要使用的DSE算法、要考虑的定制编译器序列的数量、客观度量、要使用的编译器工具链的名称和位置;以及特定于所选DSE算法的多个参数。当DSE过程终止时,这发生在达到最大数量的评估(传递到DSE工具)时和/或发生用户选择的DSE算法特有的其他事件时,软件向用户呈现最佳编译器阶段自动插入到杂注#pragma monitorstart和#pragma monitorstop3https://github.com/specs-feup/specs-c-libs/tree/master/SpecsRapl。4R. Nobre,J.比斯波,T.Carvalho等人粤ICP备10023888号-1+图二、 迭代计算随机生成的编译器序列的算法示例。该算法接收编译器传递以考虑探索(exploreParams)、探索迭代的最大数量(maxIterations)和每个阶段选择/排序的最大传递数量(maxWidth)作为输入在探索期间发现的选择/顺序(对于所选择的目标功能、目标和程序/功能),以及多个DSE度量(例如,相对于基线的改进、勘探时间)。表1示出了当编译实现动态编程算法的C OpenMP函数时,使用Nonio针对GCC和LLVM实现的性能/能量改进/降低以及相应的相位用于序列比对(nussinov)的租金m。 性能指标表1针对编译器阶段选择和/或顺序的性能改进和能耗降低,为使用GCC 5.4和LLVM3.7.1的nussi-novPolyBench/C 4.1内核带来了更好的结果,并针对具有两个IntelXeon E5 V3 CPU的工作站。MetricP improv. /E reduc.相位选择/顺序-ftracer,-fno-tree-loop-vectorize,-fno-align-loops,-fno-strict-overflow,证明由Eq. 其中L1和L2分别表示用最佳标准优化级别和用通过迭代探索找到的专用编译器阶段能量减少量的计算公式如下:其中E1和E2分别表示用最佳标准优化级别和用通过迭代探索找到的专用编译器阶段选择/顺序优化的代码的能量消耗Pimprov.=(L1/L2−1)<$100(1)E reduc. =(1−E2/E1) 100(2)GCCPerf.百分之八十能源71%-funroll-all-loops,-fno-strict-aliasing,-fno-tree-sink,-fno-ssa-phiopt,-fno-vect-cost-model。-fno-align-functions,-fno-tree-sink,-fno-tree-forwprop,-ftracer,-fno-ssa-phiopt,-fno-tree-loop-vectorize,-fpeel-loops,-fno-strict-overflow。-structurizecfg,-gvn,图3显示了执行Nonio的命令行,图4显示了执行Nonio的命令行。4显示了用于生成LLVM性能百分之三十三-sink,-cfl-aa,-mem2reg,- 跳线,-indvars,-gvn。结果见表1。4. 影响Nonio对编译器研究人员很有用(例如,以评估用于选择/排序的不同方法)、编译器开发者以及关注其应用程序性能的一般编译器用户(包括工业)。Nonio的初步版本已经用于在许多不同的上下文中执行阶段选择和/或排序,以不同的平台为目标并考虑不同的度量(参见例如,[8、9])。除了由Nonio提供的DSE内置算法实现的对执行时间和能耗(以及其他目标度量)的影响之外,如之前呈现的说明性示例的结果所示,当前的Nonio框架允许用户获取编译器优化的可能影响能量31%-basicaa,-scalarrepl,-gvn.使用集成的DSE方法对其他DSE算法做出贡献,并且容易地将DSE方案接口到不同的度量以进行优化。验证生成的解决方案也是Nonio框架的一个组成部分。生成的解决方案与输入/输出的集合进行评估,以便给出一定程度的置信度,即以给定的相位顺序生成的编译代码在功能上等同于使用标准优化级别(或根本没有优化)生成的代码。这很重要,因为阶段选择和排序可能使用之前从未测试过的编译器优化序列进一步确认可能包括软件测试R. Nobre,J.比斯波,T.Carvalho等人粤ICP备10023888号-15+++图3.第三章。 执行Nonio DSE工具的命令示例。见图4。 .properties文件的示例,该文件以LLVM为目标主机系统,性能作为客观指标,使用基于模拟退火的探索算法,依靠每次迭代平均30次执行来实现稳定性,并在修剪发现的标志序列时允许最大2%的公差。最适合在勘探时使用。发电机(例如,基于代码覆盖率)以在更大程度上测试由DSE选择的代码。5. 结论本文介绍了Nonio,一个完整的模块化设计空间探索(DSE)框架,用于专门化编译器阶段选择和/或排序。Nonio开箱即用,支持两个最常见的编译器工具链,GCC和Clang LLVM。当前版本的Nonio自动解决了GCC的阶段选择以及LLVM的阶段选择和排序问题,并针对执行时间、能耗和代码大小进行了改进。我们解释了如何扩展Nonio以适应给定用例的特殊性,无论是研究集中还是编译器用户正在努力为给定的特定目标和特定指标尽可能多地改进应用程序。最后,我们通过优化C OpenMP函数来说明Nonio的使用,该函数实现了用于序列比对的动态编程算法,当使用GCC或Clang LLVM以具有两个Intel Xeon E5 V3CPU的工作站为致谢这 项 工 作 得 到 了 TEC 4Growth 项 目 “NORTE-01-0145-FEDER-000020”的部分支持,该项目由北葡萄牙区域运营计划(NORTE2020)资助,根据葡萄牙2020伙伴关系协议,并通过欧洲区域发展基 金 ( ERDF ) 。 Bispo 感 谢 葡 萄 牙 FCT 在 博 士 后 资 助SFRH/BPD/118211/2016下提供的支持。利益冲突作者声明,本文中不存在利益冲突。引用[1]GCC,GNU编译器集合。https://gcc.gnu.org/网站。[2]拉特纳·克里斯,这是艾德维·维克拉姆. LLVM:一个终身程序分析转换的编译框架&。代码生成和优化国际研讨会论文集:反馈导向和运行时优化(CGO'04)。Washington,DC,USA:IEEE ComputerSociety; 2004,p. 七十五。[3]Fursin Grigori,Kashnikov Yuriy,Memon Abdul Wahid,ChamskiZbigniew,Milepost GCC:Machine learning enabledself-tuningcompiler. 在:国际并行编程杂志,卷。39. Springer Verlag; 2011,p.296-327。[4]霍斯特·肯尼思,埃克霍特·利文。编译器优化级探索.在:第六届IEEE/ACM国际代码生成和优化研讨会(CGO '08)的会议记录。New York,NY,USA:ACM; 2008,p. 165比74[5]库尔卡尼·萨米尔卡瓦佐斯·约翰使用机器学习缓解编译器优化阶段排序问题。In:Proc. ACM Int'L Conf. 面向对象编程系统语言与应用,OOPSLA'1 2 。New York,NY,USA:ACM; 2012,p.147比62[6]普里尼·苏雷什,杰恩·拉克希亚.寻找覆盖程序空间的好的优化序列. ACM跨架构代码优化(TACO)2013;9(4):56:1-23。[7]普洛特尼科夫·德米特里、梅尼克·德米特里、瓦达尼扬·马米孔、布恰茨基·鲁本、朱可夫·罗曼。一个用于调优编译器优化的自动工具。第九届计算机科学与信息技术国际会议。^Jesus,p. 1-7号。[8]Nobre Ricardo,Reis Luis,Cardoso João议员。作为降低能量消耗的正交方法的相位排序。在:第19届并行计算编译器研讨会(CPC 2016)。巴利亚多利德,西班牙; 2016年。[9]Nobre Ricardo,Martins Luiz GA,Cardoso João MP.一种基于图的迭代编译器通道选择和阶段排序方法。 第17届ACM嵌入式系统语言,编译器,工具和理论会议,LCTES 2016。New York,NY,USA:ACM; 2016,p.21-30[10]Martins Luiz GA , Nobre Ricardo , Delbem Alexandre CB , MarquesEduardo,Cardoso João MP.编译器优化序列探索的基于优化的选择。ACMTrans Architecture Code Optim(TACO)2016;13(1):8:1-28.[11]阿米尔-侯赛因,马里亚尼-乔瓦尼,巴勒莫-詹卢卡,朴恩贞,卡瓦佐斯-约翰,西尔瓦诺-克里斯蒂娜。COBAYN:使用贝叶斯网络的自动调优框架。ACM Trans Archit Code Optim 2016;13(2). 21,25页[12]阿舒里阿米尔H,比尼奥利安德烈,巴勒莫詹卢卡,西尔瓦诺克里斯蒂娜,库尔卡-尔尼萨米尔,卡瓦佐斯约翰。Micomp:使用优化子序列和机器学习缓解编译器阶段排序问题。ACMTransArchit Code Optim 2017;14(3). 29,28页。[13]拉德·斯科特·罗伯特Acovea:通过进化算法分析股票期权-描述进化算法,http://stderr.org/doc/acovea/html/acoveaga.html。6R. Nobre,J.比斯波,T.Carvalho等人粤ICP备10023888号-1[14]钟S,沈艳,郝芳.通过模拟退火调整编译器优化选项。2009年。第二届未来信息技术与管理工程国际会议。Sanya; 2009,p. 305 -8[15]Cardoso João MP,Carvalho Tiago,Coutinho José GF,Luk Wayne,No-breRicardo, DinizPedroC , etal.LARA: anaspect-orientedprogramminglanguage for embedded systems.第11届面向方面软件开发国际年会(AOSD '12)。New York,NY,USA:ACM; 2012,p.179比90
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功