18lk新利
的意见

编译器优化很容易

找到一个最优的编译器配置对于一个给定的工作负载使用人工智能。

受欢迎程度

在一个以前的博文,我们讨论了使用自动化的好处最大化系统的性能。我提到的用例是编译器标志采矿、和性能是超出了标准优化大多数编译器提供的旗帜。这尚未开发的性能是一个困难的问题要解决,但幸运的是有一个简单的方法。

宇宙探索的选项

编译器是一种程序,将一组指令中所描述的一种高级语言,人类可以处理成机器可读的指令。编译器的输出结果是一个二进制文件,可以由机器执行。在大多数情况下是preferrable生成的可执行文件运行尽可能快,这就是为什么相当多的精力放到提高编译器。尤其是领域的高性能计算(HPC),编译器有时会影响程序的性能比它运行的处理器架构。因此,编译器提供了大量的选项,可以调用编译时,允许工程师适应编译器的功能取决于应用程序的类型,硬件平台上运行,以及最后但并非最不重要,目标工作负载。

挑战,然而,通常是编译器提供的选项的数量进入数百人。这么多选项可供选择,找到合适的编译器标志的组合,会产生最高性能二进制程序是相当艰巨的任务。想想看:只有100参数——其中许多可以采取一系列的价值观——的数量可能排列我们的编译器标志是在10157年。相比之下,已知的宇宙中原子的数量估计为“仅仅”1082年。试图找到一种海里捞针容易得多!

的编译器标志识别正确的组合将产生表现最好的二进制是一个几乎不可能完成的任务。我说“几乎”,因为实际上是一个运行分析的有效途径,通过使用自动化和人工智能。

在这个博客中,我将描述一个编译器标志采矿试验使用Synopsys对此SLM优化器工作室软件和显示如何找到最优的编译器配置对于一个给定的工作负载使用一个自动化人工智能的工具。

这个实验

对于这一挑战,我们决定广泛流行的优化配置LLVM编译器。我们的目标是找到正确的组合的编译器标志最小化目标二进制的运行时。这意味着我们需要一个目标应用程序编译,和一个工作负载运行测试。为此,我们选择了XSbench基准行业公认的基准。XSbench仅需几分钟的优势为每个运行周期,帮助我们迅速收集采样点为我们的测试。此外,运行之间的平均误差是相当低的(平均0.3%),这意味着我们可以相信我们收集的结果作为我们实验的一部分代表,可以可靠地再现。这个基准测试提供了一个应用程序,该应用程序在测试期间执行一系列的查找,因此其性能是衡量每秒查询的平均数量。这是度量,我们将针对改善,通过优化LLVM编译器设置。

我们可以释放优化器工作室之前,我们需要连接工具与我们的基准。幸运的是,这个任务很简单,只有三个项目定义:编译器标志的列表,该工具可以修改在整个实验过程中,命令行调用基准,最后如何查找每秒从每个基准测试运行指标。一旦完成了第一步,我们现在可以运行优化器工作室,抓起一杯咖啡,看数据出现在图形用户界面,实时。

结果

既然我们选择了一个基准,只需要几分钟,我们就能看到显著的结果和性能改进只有几小时内。然而,由此产生的点图显示的不仅仅是性能(图1)。

图1:快照优化器工作室的交互式用户界面。

每个点在这个图形代表一个配置(换句话说LLVM的特定组合编译器标志)是由优化器进行测试。纵轴显示每秒查询的数量,这是我们的目标指标,横轴表示时间戳,让我们观察性能随着时间的推移,随着实验的进行。我们的起点是高亮显示为绿色;这是我们的基线配置。在这种情况下,我们选择我们的基线是一个编译器与没有定义旗帜的电话,但是我们可以选择任何配置作为一个起点。该工具还突显出红色的和最优的配置帕累托前沿,让我们来快速识别最有趣的配置。让我们更详细地看一下结果。

我们注意到的第一件事就是跑后只有几个配置,我们看到一个巨大的跳跃性能,然后,再一次,另一个测试10个额外的配置。这种快速收敛对改进典型运行时的优化实验工作室。这是由于底层算法的本质——源自遗传进化算法——尤其适合这种类型的优化问题中一个巨大的解空间。的确,在这个实验中我们同时操纵390 LLVM编译器标志——一个优化的任务无法执行手动!

我们也注意到几个“步骤”图。为每个配置访问列表的旗帜,并进一步检验我们发现开关编译器的内置优化标志(“O”)从噩-Ofast显著提高性能(图2)。

图2:放大视图显示的第一跳的性能。

优化器工作室明白快速和集中在优化配置启用了-Ofast标志。记住,O标志并不是唯一拨打我们玩,因为每个配置选择从超过一百的旗帜!

如果我们要手动执行这项工作,我们很可能会认为在如此大的增益性能,这将是尽善尽美,进一步优化的努力将是徒劳的。我们是错误的,因为优化器能够产生一个第二大跳性能执行其自动分析(图3)。

图3:放大视图显示第二跳的性能。

最终的想法

最终确定一个特定的配置优化器工作室有181个人标志设置为特定的值将提供最好的性能。找到这个最优配置手动在合理的时间内是不可能的,即使是一个编译器专家。这个实验表明,AI启用智能自动化可以被成功地用来解决这种类型的一个非常复杂的问题,在大量的变量创建一个令人难以置信的解空间。

跟进我们的实验,这将是有趣的,看看有一种方法可以达到类似水平的性能通过设置较少的旗帜。可以优化器工作室的自动化方法帮助我们完善优化?可以帮助我们更好地理解特定的旗帜对性能的影响?答案是肯定的,是的,我们将进一步调查在以后的博文。

与此同时,你可以找到更多信息Synopsys对此SLM优化器工作室



留下一个回复


(注意:这个名字会显示公开)

Baidu