论文部分内容阅读
在性能和能耗的驱使下,处理器芯片经历着单核到同构多核,再到异构多核的发展之路。异构多核虽然是提升能效的有效途径,但也为编程效率、性能和能耗的自动调优带来了很大的困难。过去十多年的相关工作已经对异构多核的潜力、编程方式以及自动调优等问题做了大量的研究。我们认为其中以算法组件为中心的协作式编程所具备的抽象粒度、协作性和扩展性等特点恰恰适应当前日趋复杂多样的体系结构发展趋势。基于算法组件的方法是一种源自于库,但更为严谨的编程方式,其保持了基于算法/模块构建程序的习惯,摒弃了库松散混乱的缺点。然而该方法至今并未得到很好的发展和应用,仍存在一些未解决的关键问题,例如:缺乏系统的软件体系支持,无法应对新型加速器,复杂平台自动调优难等。本文正是要迎着当今体系结构日趋复杂多变,软件开发需求飞速增长的趋势,倡导使用基于算法组件的协作式编程,并系统性的研究和实现相应的关键技术,来发掘该方法的优势和潜力。本文的具体贡献如下: 异构多核上基于算法组件的编程和运行时:我们提出以算法组件为中心进行编程角色、职责和视图的划分;设计并实现了能将多角色代码融合并高效执行的编程和运行时整体框架ACCPI(Algorithm Component Centric Programming Infrastructure);系统的讨论了整体方案的开销和算法组件的调度等问题。我们将6个典型的测试用例使用以算法组件为中心的方式重新构建,并由运行时框架托管执行在典型的(多核CPU+GPU)异构多核平台上,结果表明:一份程序无需修改便可运行在单核、多核和GPU三种不同的平台上,且获得了和三种原始程序相当的(95%以上)性能,达到了性能的可移植性。以此为基础,我们提出了 WSQ(weighted shortest queue)的调度策略,结合了算法组件特点和平台资源使用情况进行调度,在包含三种核(单核、多核CPU和GPU)的平台上同时运行6个应用程序可获得1.37×的整体平均加速比。 基于算法组件的编程在新兴加速器上的扩展:我们以新兴的非精确异构多核为出发点,探索了如何在未来更加灵活、可配置的异构多核平台上构建基于算法组件的方法。我们首先构建了一个模型级的非精确异构多核模拟平台。在此过程中我们为不同的加速器设计了高能效的非精确计算方案;且提出了利用性能/能耗模型为运行时策略提供反馈的方案。以此平台为基石,我们扩展了基于算法组件的编程框架ACCPI来支持非精确计算;并提出了一种基于分层旋钮的运行时技术来抽象异构非精确加速器及其执行时可变的参数配置;同时提出了使用基于能效分数的加速器标定策略,为加速器的选择提供更合理的参考。我们使用5个典型的测试用例,对基于算法组件的方法和上述模拟平台进行评估,结果显示相对于精确CPU,我们获得了平均24%的能耗节省。 性能和能耗的自动调优:针对复杂且不规则的异构多核优化空间,我们设计并实现了一种基于多目标模拟退火算法的在线搜索策略,在生产运行当中为程序中的算法选取合适的加速器及其非精确参数,在一定的精确度要求下最大化能耗节省。该策略同时结合了IODC[92]的思想,对在线开销和收益进行有效管理;我们从算法分析和实验的双重角度验证了在线开销管理策略具有良好的鲁棒性。最后我们使用5个典型应用以及每个应用20,000个不同的数据集来模拟真实的用户执行场景,结果显示在保证精确度不低于95%,且考虑在线策略的性能/能耗开销的情况下,我们可以获得平均40%的能耗节省和2.1×的加速比。